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、查看当前的计算引擎

set hive.execution.engine;

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

clipboard

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

set hive.execution.engine=spark;

clipboard

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

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

3、修改hive-site.xml

<!-- 使用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目录下:

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目录下: (重要)

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中

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

[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目录,分发到其余机器,让三台机器配置同步。

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

7、重启spark与hive的metastore

stop-all.sh
start-all.sh

nohup hive --service metastore &
nohup hiveserver2 &

8、测试

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

clipboard

hive登录,执行插入的sql

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

或者聚合计算的sql也行:

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

原文地址:https://www.cnblogs.com/doublexi/p/15638331.html