Hive on Spark配置

Hive on Spark 官网详情https://cwiki.apache.org//confluence/display/Hive/Hive+on+Spark:+Getting+Started

参考:https://www.cnblogs.com/wh984763176/p/13503875.html

版本要求:(版本很重要)

安装和Spark对应版本一起编译的Hive,当前官网推荐的版本关系如下:

image

环境要求:三台linux服务器,安装好spark,并配置好spark on yarn模式。

安装好hive和metastore。

安装spark与hive

安装spark可以参考前面的文章:

Spark集群环境搭建——部署Spark集群:https://www.cnblogs.com/doublexi/p/15624795.html

安装hive,可以参考:

Hive安装部署:https://www.cnblogs.com/doublexi/p/15636547.html

配置Hive on Spark

1、查看当前的计算引擎

01
set hive.execution.engine;

可以看到hive默认的计算引擎为MR,而且有提示,这个配置即将被废弃了,推荐使用spark或者tez

clipboard

2、在线修改计算引擎为spark

01
set hive.execution.engine=spark;

clipboard

这种方式只在当前终端有效,终端关闭,再打开又恢复为了mr。

想要永久修改引擎为spark,可以修改配置文件

3、修改hive-site.xml

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<!-- 使用spark计算引擎 -->
<property>
    <name>hive.execution.engine</name>
    <value>spark</value>
</property>
<!-- 这个配置注释掉,本次不能用
<property>
   <name>spark.master</name>
   <value>spark://dev-spark-master-206:7077</value>
</property>
-->
<property>
    <name>spark.home</name>
    <value>/data/apps/spark-3.1.2/</value>
</property>
<property>
    <name>spark.master</name>
    <value>yarn</value>
</property>
<property>
    <name>spark.eventLog.enabled</name>
    <value>true</value>
</property>
<property>
    <name>spark.eventLog.dir</name>
    <value>hdfs://dev-spark-master-206:8020/spark-eventlog</value>
</property>
<property>
    <name>spark.executor.memory</name>
    <value>512m</value>
</property>
<property>
    <name>spark.driver.memory</name>
    <value>512m</value>
</property>
<property>
    <name>spark.serializer</name>
    <value>org.apache.spark.serializer.KryoSerializer</value>
</property>
<property>
    <name>spark.yarn.jars</name>
    <value>hdfs://dev-spark-master-206:8020/spark-jars/*</value>
</property>
<property>
    <name>hive.spark.client.server.connect.timeout</name>
    <value>300000</value>
</property>

4、拷贝jar包和xml配置

将Hive的lib目录下的指定jar包拷贝到Spark的jars目录下:

01
02
03
04
05
06
07
08
hive-beeline-3.1.2.jar
hive-cli-3.1.2.jar hive-exec-3.1.2.jar
hive-jdbc-3.1.2.jar
hive-metastore-3.1.2.jar
 
 
[root@dev-spark-slave-171 hive-3.1.2]# cd /data/apps/hive-3.1.2/lib/
[root@dev-spark-slave-171 lib]# cp hive-beeline-3.1.2.jar hive-cli-3.1.2.jar hive-exec-3.1.2.jar hive-jdbc-3.1.2.jar hive-metastore-3.1.2.jar /data/apps/spark-3.1.2/jars/

将Spark的jars目录下的指定jar包拷贝到Hive的lib目录下: (重要)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
spark-network-common_2.12-3.1.2.jar
spark-core_2.12-3.1.2.jar
scala-library-2.12.10.jar
chill-java-0.9.5.jar
chill_2.12-0.9.5.jar
jackson-module-paranamer-2.10.0.jar
jackson-module-scala_2.12-2.10.0.jar
jersey-container-servlet-core-2.30.jar
jersey-server-2.30.jar
json4s-ast_2.12-3.7.0-M5.jar
kryo-shaded-4.0.2.jar minlog-1.3.0.jar
scala-xml_2.12-1.2.0.jar
spark-launcher_2.12-3.1.2.jar
spark-network-shuffle_2.12-3.1.2.jar
spark-unsafe_2.12-3.1.2.jar
xbean-asm7-shaded-4.15.jar
 
[root@dev-spark-slave-171 hive-3.1.2]# cd /data/apps/spark-3.1.2/jars/
[root@dev-spark-slave-171 jars]# cp spark-network-common_2.12-3.1.2.jar spark-core_2.12-3.1.2.jar scala-library-2.12.10.jar chill-java-0.9.5.jar chill_2.12-0.9.5.jar jackson-module-paranamer-2.10.0.jar jackson-module-scala_2.12-2.10.0.jar jersey-container-servlet-core-2.30.jar jersey-server-2.30.jar json4s-ast_2.12-3.7.0-M5.jar kryo-shaded-4.0.2.jar minlog-1.3.0.jar scala-xml_2.12-1.2.0.jar spark-launcher_2.12-3.1.2.jar spark-network-shuffle_2.12-3.1.2.jar spark-unsafe_2.12-3.1.2.jar xbean-asm7-shaded-4.15.jar /data/apps/hive-3.1.2/lib/

将hadoop中的yarn-site.xml、hdfs-site.xml以及Hive的hive-site.xml放入spark的conf中

01
cp /data/apps/hadoop-3.2.2/etc/hadoop/hdfs-site.xml /data/apps/hadoop-3.2.2/etc/hadoop/yarn-site.xml /data/apps/hive-3.1.2/conf/hive-site.xml /data/apps/spark-3.1.2/conf/

5、上传至HDFS

为了使各个节点都能够使用 Spark 引擎进行计算,需要将Spark的jars目录下所有依赖包上传至HDFS

01
02
[root@dev-spark-slave-171 jars]# cd /data/apps/spark-3.1.2/jars/
[root@dev-spark-slave-171 jars]# hdfs dfs -put * /spark-yarn/jars/

6、将spark目录与hive中lib目录,分发到其余机器,让三台机器配置同步。

01
02
rsync-script /data/apps/spark-3.1.2/
rsync-script /data/apps/hive/lib/

7、重启spark与hive的metastore

01
02
03
04
05
stop-all.sh
start-all.sh
 
nohup hive --service metastore &
nohup hiveserver2 &

8、测试

再次启动hive,可以看到默认引擎已经改为了spark了。

clipboard

hive登录,执行插入的sql

01
insert into table test.student values(1,'zhouqi',50);

或者聚合计算的sql也行:

01
select count(1) from test.student;

运行成功后,如下图:

image

在yarn上,可以看到这个Application,点击这个Application ID

image

点击ApplicationMaster

image

在spark上也看到这个任务

image

当你退出hive的时候,这个Application任务也就随之结束了,可以查看history。


报错:

如果执行的过程中报错:

Failed to execute spark task, with exception 'org.apache.hadoop.hive.ql.metadata.HiveException(Failed to create Spark client for Spark session a103f35a-b3fa-439d-9b1f-d17521f5ff57)'

FAILED: Execution Error, return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Failed to create Spark client for Spark session a103f35a-b3fa-439d-9b1f-d17521f5ff57

clipboard

查看logs/hive.log,发现如下报错:

2021-12-02T17:30:56,452 ERROR [16d94a1c-186d-4fa5-8b10-4eff1cc22037 main] spark.SparkTask: Failed to execute spark task, with exception 'org.apache.hadoop.hive.ql.metadata.HiveException(Failed to create Spark client for Spark session a103f35a-b3fa-439d-9b1f-d17521f5ff57)'

org.apache.hadoop.hive.ql.metadata.HiveException: Failed to create Spark client for Spark session a103f35a-b3fa-439d-9b1f-d17521f5ff57

Caused by: java.lang.NoClassDefFoundError: org/apache/spark/SparkConf

Caused by: java.lang.ClassNotFoundException: org.apache.spark.SparkConf

clipboard

执行上述4、5、6、7步骤之后,这个问题消失,变成了一个新的问题:

Job failed with java.lang.ClassNotFoundException: org.apache.spark.AccumulatorParam

FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job failed during runtime. Please check stacktrace for the root cause.

clipboard

经过,网上查找资料,发现是hive与spark的版本不对应导致的。

目前我们使用的版本为:

hive-3.1.2 + spark-3.1.2 (这个版本搭配不行,有问题)

解决方案:

1、重新编译hive3.1.2,让其支持spark-3.1.2。参考:https://forsre.cn/oasis/hive3.1.2%E7%BC%96%E8%AF%91%E6%94%AF%E6%8C%81spark3.0.0/

2、切换版本

我们使用hive-2.3.7+spark-2.4.5,试验成功。

按照官方对应的版本为:https://cwiki.apache.org//confluence/display/Hive/Hive+on+Spark:+Getting+Started

clipboard

可以按照提示去选择对应的spark和hive的版本,然后继续上述步骤操作就可以了。

关于配置Hive on spark,可以参考:https://blog.csdn.net/pucao_cug/article/details/72773564

https://www.cnblogs.com/wh984763176/p/13503875.html

posted @   doublexi  阅读(8413)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示