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

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

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实操

原文发布于微信公众号 - Hadoop实操(gh_c4c535955d0f)

原文发表时间:2018-05-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hadoop实操

如何使用Cloudera Manager启用HDFS的HA

在HDFS集群中NameNode存在单点故障(SPOF),对于只有一个NameNode的集群,如果NameNode机器出现意外,将导致整个集群无法使用。为了解决...

1.5K40
来自专栏null的专栏

Hadoop学习笔记——Hadoop常用命令

Hadoop下有一些常用的命令,通过这些命令可以很方便操作Hadoop上的文件。 1、查看指定目录下的内容 语法: hadoop fs -ls 文件目录 2、打...

30740
来自专栏祝威廉

Spark 多个Stage执行是串行执行的么?

这里的话,我们构建了两个输入(input1,input2),input2带有一个reduceByKey,所以会产生一次Shuffle,接着进行Join,会产生第...

11440
来自专栏Hadoop实操

如何使用Cloudera Manager启用YARN的HA

前面Fayson写过《如何使用Cloudera Manager启用HDFS的HA》,YARN的HA架构和HDFS的HA类似,需要启动两个ResourceMana...

45690
来自专栏数据科学与人工智能

【Spark研究】Spark之工作原理

基本概念 理解Spark的运行模式涉及一系列概念: (1)Cluster Manager:在集群上获取资源的外部服务。目前有三种类型:1. Standalone...

45750
来自专栏Albert陈凯

hadoop安装可能遇到的问题Incompatible namespaceIDs

如果大家在安装的时候遇到问题,或者按步骤安装完后却不能运行Hadoop,那么建议仔细查看日志信息,Hadoop记录了详尽的日志信息,日志文件保存在logs文件夹...

35280
来自专栏Hadoop实操

如何使用Cloudera Manager禁用YARN的HA

前面Fayson写过《如何使用Cloudera Manager启用YARN的HA》。本篇文章主要讲述如何使用Cloudera Manager禁用YARN的HA。

35550
来自专栏Hadoop实操

如何在CDH中启用Spark Thrift

CDH 自带的Spark 不支持Spark Thrift,因为spark-assembly jar中缺少Hive thrift相关的依赖包,导致CDH用户没法使...

2.2K90
来自专栏挖掘大数据

如何搭建Hadoop伪分布式集群?

如何搭建Hadoop伪分布式集群,本文将详细介绍。

29000
来自专栏Hadoop实操

如何查看集成Sentry后Hive作业的真实用户

在CDH集群启用Sentry服务后,需要关闭Hive的启用模拟功能,hive.server2.enable.impersonation设为false,这会导致任...

60650

扫码关注云+社区

领取腾讯云代金券