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,当前官网推荐的版本关系如下:
环境要求:三台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
2、在线修改计算引擎为spark
01 | set hive.execution.engine=spark; |
这种方式只在当前终端有效,终端关闭,再打开又恢复为了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了。
hive登录,执行插入的sql
01 | insert into table test .student values(1, 'zhouqi' ,50); |
或者聚合计算的sql也行:
01 | select count(1) from test .student; |
运行成功后,如下图:
在yarn上,可以看到这个Application,点击这个Application ID
点击ApplicationMaster
在spark上也看到这个任务
当你退出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
查看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
执行上述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.
经过,网上查找资料,发现是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
可以按照提示去选择对应的spark和hive的版本,然后继续上述步骤操作就可以了。
关于配置Hive on spark,可以参考:https://blog.csdn.net/pucao_cug/article/details/72773564
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具