1、Hive环境搭建
这里使用的是Hive3.1.3。
安装过程:略
2、HiveOnSpark
2.1、Hive引擎简介
Hive引擎包括:默认MR、tez、spark
Hive on Spark:Hive既作为存储元数据又负责SQL的解析优化,语法是HQL语法,执行引擎变成了Spark,Spark负责采用RDD执行。
Spark on Hive : Hive只作为存储元数据,Spark负责SQL解析优化,语法是Spark SQL语法,Spark负责采用RDD执行。
2.2、Hive on Spark配置
2.2.1、兼容性说明
注意:官网下载的Hive3.1.3和Spark3.3.1默认是不兼容的。因为Hive3.1.3支持的Spark版本是2.3.0,所以需要我们重新编译Hive3.1.3版本。
编译步骤:官网下载Hive3.1.3源码,修改pom文件中引用的Spark版本为3.3.1,如果编译通过,直接打包获取jar包。如果报错,就根据提示,修改相关方法,直到不报错,打包获取jar包。
或者直接使用Spark2.3.0.
hive官网spark版本对应信息:Hive on Spark: Getting Started - Apache Hive - Apache Software Foundation
2.2.2、在Hive所在节点部署Spark纯净版
1)Spark官网下载jar包地址:
2)上传并解压解压spark-3.3.1-bin-without-hadoop.tgz
[kingjw@hadoop102 software]$ tar -zxvf spark-3.3.1-bin-without-hadoop.tgz -C /opt/module/
[kingjw@hadoop102 software]$ mv /opt/module/spark-3.3.1-bin-without-hadoop /opt/module/spark
3)修改spark-env.sh配置文件
修改文件名。
[kingjw@hadoop102 software]$ mv /opt/module/spark/conf/spark-env.sh.template /opt/module/spark/conf/spark-env.sh
编辑文件
[kingjw@hadoop102 software]$ vim /opt/module/spark/conf/spark-env.sh
增加如下内容。
export SPARK_DIST_CLASSPATH=$(hadoop classpath)
2.2.3、配置SPARK_HOME环境变量
[kingjw@hadoop102 software]$ sudo vim /etc/profile.d/my_env.sh
添加如下内容。
# SPARK_HOME
export SPARK_HOME=/opt/module/spark
export PATH=$PATH:$SPARK_HOME/bin
source 使其生效。
[kingjw@hadoop102 software]$ source /etc/profile.d/my_env.sh
2.2.4、在hive中创建spark配置文件
[kingjw@hadoop102 software]$ vim /opt/module/hive/conf/spark-defaults.conf
添加如下内容(在执行任务时,会根据如下参数执行)。
spark.master yarn
spark.eventLog.enabled true
spark.eventLog.dir hdfs://mycluster/spark-history
spark.executor.memory 1g
spark.driver.memory 1g
在HDFS创建如下路径,用于存储历史日志。
[kingjw@hadoop102 software]$ hadoop fs -mkdir /spark-history
2.2.5、向HDFS上传Spark纯净版jar包
说明1:采用Spark纯净版jar包,不包含hadoop和hive相关依赖,能避免依赖冲突。
说明2:Hive任务最终由Spark来执行,Spark任务资源分配由Yarn来调度,该任务有可能被分配到集群的任何一个节点。所以需要将Spark的依赖上传到HDFS集群路径,这样集群中任何一个节点都能获取到。
[kingjw@hadoop102 software]$ hadoop fs -mkdir /spark-jars
[kingjw@hadoop102 software]$ hadoop fs -put /opt/module/spark/jars/* /spark-jars
2.2.6、修改hive-site.xml文件
[kingjw@hadoop102 ~]$ vim /opt/module/hive/conf/hive-site.xml
添加如下内容。
<!--Spark依赖位置(注意:端口号8020必须和namenode的端口号一致)-->
<property>
<name>spark.yarn.jars</name>
<value>hdfs://mycluster/spark-jars/*</value>
</property>
<!--Hive执行引擎-->
<property>
<name>hive.execution.engine</name>
<value>spark</value>
</property>
2.3、Hive on Spark测试
(1)启动hive客户端
[kingjw@hadoop102 hive]$ /opt/module/hive/bin/hive
(2)创建一张测试表
hive (default)> create table student(id int, name string);
(3)通过insert测试效果
hive (default)> insert into table student values(1,'abc');
若结果如下,则说明配置成功。
3、Yarn环境配置
3.1、增加ApplicationMaster资源比例
容量调度器对每个资源队列中同时运行的Application Master占用的资源进行了限制,该限制通过yarn.scheduler.capacity.maximum-am-resource-percent参数实现,其默认值是0.1,表示每个资源队列上Application Master最多可使用的资源为该队列总资源的10%,目的是防止大部分资源都被Application Master占用,而导致Map/Reduce Task无法执行。
生产环境该参数可使用默认值。但学习环境,或者本机测试环境,集群资源总数很少,如果只分配10%的资源给Application Master,则可能出现,同一时刻只能运行一个Job的情况,因为一个Application Master使用的资源就可能已经达到10%的上限了。故此处可将该值适当调大。
(1)在hadoop102的/opt/module/hadoop/etc/hadoop/capacity-scheduler.xml文件中修改如下参数值
[kingjw@hadoop102 hadoop]$ vim capacity-scheduler.xml
<property>
<name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
<value>0.8</value>
</property>
(2)分发capacity-scheduler.xml配置文件
[kingjw@hadoop102 hadoop]$ xsync capacity-scheduler.xml
(3)关闭正在运行的任务,重新启动yarn集群
[kingjw@hadoop103 hadoop]$ stop-yarn.sh
[kingjw@hadoop103 hadoop]$ start-yarn.sh
4、总结
介绍了HiveOnSpark的安装配置方式,Hive使用Spark做计算引擎,可以大大的加快程序的计算速度,是生产环境中常用的方式。
有帮助的话帮忙点个赞吧!