spark on hive 问题记录

本文详细描述了在Windows环境下使用Spark 3.x操作Hive 3.1.2时遇到的问题,包括依赖版本调整、权限设置和Tez引擎切换。通过解决步骤,作者分享了如何配置Maven依赖、设置HADOOP_USER_NAME环境变量以及调整配置以适应本地环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

操作描述:
本地使用spark 代码 操作 自己搭建的hadoop 集群 中 hive 数据

环境背景:本机搭建的hive 版本是 3.1.2 本地window scala版本是2.12.15

java 代码:

//import org.apache.spark.SparkConf;
import org.apache.spark.sql.SparkSession;

public class sparkHive {
    public static void main(String[] args) {
        SparkSession sparkSession = SparkSession.builder()
                .master("local")
                .appName("spark_hive")
                .config("hive.metastore.uris", "thrift://hadoop2:9083")
//                .config("spark.sql.warehouse.dir","hdfs://mycluster/user/hive/warehouse")
                .enableHiveSupport()
                .getOrCreate();

        sparkSession.sql("create table wqg.spark_hive_20220107_04 (name string)");
        sparkSession.sql("insert into wqg.spark_hive_20220107_04 values('tom')");

        sparkSession.stop();
    }
}

问题一:
org.apache.spark.sql.SparkSession$Builder.enableHiveSupport(SparkSession.scala:883)

这里我依赖的版本是spark3.x

开始的maven依赖

<dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.12</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-hive_2.12</artifactId>
            <version>3.0.0</version>
            <scope>provided</scope>
        </dependency>

</dependencies>

网上的搜索基本都是 提示需要导入spark-hive 这个依赖
但是我导入还是不行 依旧报错 提示找不到类
在这里插入图片描述在这里插入图片描述
实际是有的 后来降低了版本解决

maven依赖改为

   <properties>
        <scala.version>2.12</scala.version>
        <spark.version>2.4.4</spark.version>
    </properties>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_${scala.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_${scala.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-hive -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-hive_${scala.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
    </dependencies>

问题二:权限问题
错误信息:
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=Administrator, access=WRITE, inode="/user/hive/warehouse/xxx.db/

解决:
idea中设置环境变量:
在这里插入图片描述变量设置:HADOOP_USER_NAME=root
在这里插入图片描述

问题三:因为我本机是tez 引擎执行
错误信息:
java.lang.NoClassDefFoundError: org/apache/tez/dag/api/SessionNotRunning
修改配置文件: 将tez配置注释就好
在这里插入图片描述

结果展示:
在这里插入图片描述

### SparkHive 的介绍 #### Apache Hive Apache Hive 是一种数据仓库工具,专为查询和管理大规模分布式存储中的结构化数据而设计。Hive 提供了一种类似于 SQL 的查询语言——HiveQL,使得熟悉关系型数据库的开发者能够轻松上手。最初,Hive 使用 MapReduce 作为其执行引擎来处理查询请求。 #### Apache Spark Apache Spark 则是一个快速通用的大规模数据处理引擎,支持内存计算,这使其在迭代算法、交互式数据分析等方面表现优异。Spark 不仅提供了强大的批处理能力,还扩展到了流处理、机器学习以及图计算等多个领域。它拥有丰富的API接口,适用于多种编程语言如Scala、Java、Python等。 ### SparkHive 的主要区别 #### 执行模型差异 - **MapReduce vs RDD/Dataset** - Hive 原生依赖于 Hadoop 的 MapReduce 计算框架来进行任务调度与并行运算[^1]。 - Spark 引入了弹性分布式数据集 (Resilient Distributed Dataset, RDD) 及后来更高效的 DataFrame/DataSet 抽象层次,在性能上有显著提升,尤其是在复杂作业流程中减少了磁盘I/O开销[^2]。 #### 性能对比 - **速度优势** - Spark 支持基于内存的操作,默认情况下会尽可能多地缓存中间结果到内存里,从而加快后续阶段的数据访问速度;相比之下,由于每次都需要读写硬盘文件系统(HDFS),因此采用MapReduce方式工作的传统Hive效率较低。 #### 集成程度不同 - **集成模式** - 当提到 "Spark on Hive" 或者 “Hive on Spark”,实际上是指两者之间不同的协作形式。前者指的是利用现有的 Hive Metastore 来获取元数据信息,并通过 SparkSQL 解析器提交查询给 Spark 运行环境去完成实际工作负载。 - 后者意味着完全替换掉原有的 MapReduce 实现路径,让整个查询过程都在 Spark 上面跑起来,包括计划生成在内的所有环节都由后者接管。 ```python from pyspark.sql import SparkSession # 创建一个 Spark Session 对象并与 Hive 元数据连接 spark = SparkSession.builder \ .appName("example") \ .enableHiveSupport() \ .getOrCreate() # 查询 Hive 表格 df = spark.sql("SELECT * FROM my_table LIMIT 10") # 显示前几条记录 df.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值