温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
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实操