计算机系统应用教程网站

网站首页 > 技术文章 正文

0263-Hive2.2.0如何与CDH集群中的Spark1.6集成

btikc 2024-10-12 10:58:38 技术文章 12 ℃ 0 评论

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

Fayson的github:https://github.com/fayson/cdhproject

提示:代码块部分可以左右滑动查看噢

1.文档编写目的

在前面的文章Fayson介绍了《

如何在CDH集群中安装Hive2.3.3

》,本篇文章主要介绍Hive2.2.0服务如何与CDH集群中的Spark1.6集成,Hive on Spark对于Hive和Spark的版本都有严格的要求,Fayson本文使用的是Hive2.2.0版本做测试,具体版本的版本兼容性如下:

  • 内容概述

1.环境准备

2.Hive2.2.0集成Spark1.6

3.验证是否集成成功

4.总结

  • 测试环境

1.CM和CDH版本为5.14.2

2.Hive的版本为2.2.0

3.操作系统版本为RedHat7.4

4.JDK版本为1.8.0_131

2.环境准备


1.Hive2服务部署成功且正常使用

这里Hive2服务的部署就不在介绍了,可以参考Fayson前面《

如何在CDH集群中安装Hive2.3.3

》文章。

使用beeline和HiveCLI都可以登录Hive2.2.0并正常使用。

2.CDH集群已部署Spark1.6且服务正常

提交一个Spark作业测试Spark服务是否正常。

spark-submit --class org.apache.spark.examples.SparkPi\
 --master yarn-client --num-executors 4 --driver-memory 2g\
 --driver-cores 1 --executor-memory 2g --executor-cores 1\
 /opt/cloudera/parcels/CDH/lib/spark/lib/spark-examples.jar 10

(可左右滑动)

作业成功执行

3.Hive2集成Spark1.6


1.创建软连将${SPARK}_HOME}/lib目录下的spark-assembly.jar包软连至${HIVE2_HOME}/lib目录下

[root@ip-172-31-5-38 lib]# pwd
/opt/cloudera/HIVE2/lib
[root@ip-172-31-5-38 lib]# ln -s /opt/cloudera/parcels/CDH/lib/spark/lib/spark-assembly.jar spark-assembly.jar 
[root@ip-172-31-5-38 lib]# ll spark-assembly.jar

(可左右滑动)

2.将Spark1.6的spark-assembly.jar包上传至HDFS的/spark-jars目录下

[root@ip-172-31-5-38 lib]# pwd
/opt/cloudera/HIVE2/lib
[root@ip-172-31-5-38 lib]# ln -s /opt/cloudera/parcels/CDH/lib/spark/lib/spark-assembly.jar spark-assembly.jar 
[root@ip-172-31-5-38 lib]# ll spark-assembly.jar

(可左右滑动)

将Hive2 On Spark的Spark依赖包放在HDFS上,防止Yarn运行Spark作业时分发spark-assembly.jar包

3.修改hive-site.xml配置文件,在文件的末尾增加如下内容

<property>
 <name>spark.master</name>
 <value>yarn-cluster</value>
</property>
<property>
 <name>hive.merge.sparkfiles</name>
 <value>true</value>
</property>
<property>
 <name>spark.executor.memory</name>
 <value>1g</value>
</property>
<property>
 <name>spark.driver.memory</name>
 <value>1g</value>
</property>
<property>
 <name>spark.executor.cores</name>
 <value>1</value>
</property>
<property>
 <name>spark.yarn.driver.memoryOverhead</name>
 <value>102</value>
</property>
<property>
 <name>spark.yarn.executor.memoryOverhead</name>
 <value>326</value>
</property>
<property>
 <name>spark.dynamicAllocation.enabled</name>
 <value>true</value>
</property>
<property>
 <name>spark.dynamicAllocation.initialExecutors</name>
 <value>1</value>
</property>
<property>
 <name>spark.dynamicAllocation.minExecutors</name>
 <value>1</value>
</property>
<property>
 <name>spark.dynamicAllocation.maxExecutors</name>
 <value>2147483647</value>
</property>
<property>
 <name>hive.spark.dynamic.partition.pruning.map.join.only</name>
 <value>false</value>
</property>
<property>
 <name>spark.shuffle.service.enabled</name>
 <value>true</value>
</property>
<property>
 <name>spark.eventLog.enabled</name>
 <value>true</value>
</property>
<property>
 <name>spark.eventLog.dir</name>
 <value>hdfs://ip-172-31-8-230.ap-southeast-1.compute.internal:8020/user/spark/applicationHistory</value>
</property>
<property>
 <name>spark.yarn.jar</name>
 <value>hdfs://ip-172-31-8-230.ap-southeast-1.compute.internal:8020/spark-jars/spark-assembly.jar</value>
</property>

(可左右滑动)

注意:上述的配置中多数配置信息为Spark作业执行参数,需要注意的是spark.eventLog.enabled和spark.eventLog.dir需要指定,否则Spark作业执行完成后不能通过Spark的History查看到执行成功的作业,日志目录指定的地址如果不配置hdfs路径则默认使用的是本地目录。

4.完成如上配置后,重启HIveMetastore和HiveServer2服务

[root@ip-172-31-5-38 ~]# hive2
[root@ip-172-31-5-38 ~]# hive2-server
[root@ip-172-31-5-38 ~]# ps -ef |grep -i hivemetastore
[root@ip-172-31-5-38 ~]# ps -ef |grep -i hiveserver2

(可左右滑动)

Fayson这里可以使用hive2和hive2-server命令是因为在/etc/profile配置了命令的别名

alias hive2="nohup /opt/cloudera/HIVE2/bin/hive --service metastore > /opt/cloudera/HIVE2/logs/hive-metastore.log 2>&1 &"
alias hive2-server="nohup /opt/cloudera/HIVE2/bin/hive --service hiveserver2 > /opt/cloudera/HIVE2/logs/hive-server2.log 2>&1 &"
alias beeline2="/opt/cloudera/HIVE2/bin/beeline"

(可左右滑动)

4.验证Hive2 On Spark


1.HiveCLI命令行验证

[root@ip-172-31-5-38 bin]# sudo -u hive ./hive
hive> use test;
hive> set hive.execution.engine=spark;
hive> select id,count(*) from test_table group by id ;

(可左右滑动)

查看Yarn的运行的作业类型

2.使用beeline连接测试

[root@ip-172-31-5-38 ~]# beeline2
beeline> !connect jdbc:hive2://localhost:10000 hive hive
0: jdbc:hive2://localhost:10000> use test;
0: jdbc:hive2://localhost:10000> set hive.execution.engine=spark;
0: jdbc:hive2://localhost:10000> select id,count(*) from test_table group by id;

(可左右滑动)

观察Yarn运行的作业类型

5.总结


1.配置集成Hive2 On Spark时需要注意在hive-site.xml文件中配置

spark.eventLog.enabled和spark.eventLog.dir否则Spark作业不会在Spark的History界面显示,也可以不在配置文件中指定,在运行作业是使用set的方式指定。

2.访问Hive2执行Spark作业时会看到,会在Yarn上启动一个Spark的常驻进程,当前会话的所有SQL操作均在该常驻进程中执行会在该作业下产生多个Job Id,不会产生新的Spark作业,当会话终止时该Spark作业会停止,这里需要注意的是如果会话异常退出可能导致该常驻作业不会停止。

更多配置说明和官网推荐配置可参考如下链接:

https://cwiki.apache.org/confluence/display/Hive/Hive+on+Spark%3A+Getting+Started#HiveonSpark:GettingStarted-RecommendedConfiguration

提示:代码块部分可以左右滑动查看噢

为天地立心,为生民立命,为往圣继绝学,为万世开太平。

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表