Hive3.1.2整合Spark3.0.0-HiveOnSpark

一,整合原理

1,HiveOnSpark

Hive是一个Sql解析引擎,其不具备计算能力,Hive将Sql解析为物理执行计划,将物理执行计划转换为计算任务,交由计算引擎执行,默认的引擎是MapReduce,但MapReduce执行速度慢,随着Spark的崛起,Hive支持Spark作为计算引擎,这就是HiveOnSpark

2,SparkOnHive

比较容易混淆,二者差距还是很大的,SparkOnHive只是使用了Hive的元数据服务,Sql解析由Spark完成、计算也由Spark完成。

3,Hive 3.1.2与spark 3的兼容性问题

Hive3.1.2默认支持Spark2.3.0,默认支持的意思是Hive在调用Spark的Api时,使用的是2.3.0版本的Api,这些Api在Spark3时可能已经被移除了,或者签名变了。如果Hive运行在Spark3的环境中,必然出现ClassNotFound或者NoMethodDef之类的异常。

解决办法是修改Hive源码。

二,整合步骤

  • 1,安装hadoop,主要是yarn和hdfs,配置环境变量
  • 2,安装spark,配置spark环境变量
  • 3,安装hive,配置环境变量

三,安装hadoop

1,将Hadoop的压缩包上传到服务器,解压
2,配置core-site.xml,其中最重要的两个配置如下

<property>
   <!-- namenode的端口,对hdfs的访问要通过该端口进行 -->
    <name>fs.defaultFS</name>
    <value>hdfs://node1:8080</value>
  </property>
  
  <!-- hdfs文件在本地磁盘的存储位置 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/export/atguigu/soft/hadoop-3.1.3/data</value>
  </property>

3,配置hdfs-site.xml文件

配置hdfs web服务的服务器和访问端口
配置副本数

<property>
    <name>dfs.namenode.http-address</name>
    <value>node1:9870</value>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>node3:9686</value>
  </property>

4,配置yarn-site.xml

配置ResourceManager的位置
配置日志聚合

<property>
   <name>yarn.resourcemanager.hostname</name>
   <value>node2</value>
 </property>
 <property>
   <name>yarn.log.server.url</name>
   <value>http://node2:19888/jobhistory/logs</value>
 </property>
 <property>
   <name>mapreduce.log-aggregation.retain-seconds</name>
   <value>604800</value>
 </property>

5,/etc/profile中配置Hadoop的环境变量

export HADOOP_HOME=/export/soft/hadoop-3.1.3
export PATH=:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_CLASSPATH=`hadoop classpath`

6,将hadoop根目录和环境变量在hadoop集群所有节点上按如上步骤配置,可以通过scp分发的方式快速完成。

四,Spark安装

1,上传、解压Spark3.0.0安装包
2,配置spark环境变量

export SPARK_HOME=/export/soft/spark-3.0.0-bin-hadoop3.2/
export PATH=:$PATH:$SPARK_HOME/bin

PS:spark的作用是提供spark任务的执行环境,Hive会通过spark-submit提交spark任务,spark将任务分发到spark集群各个节点。

3,在集群所有节点上安装spark,配置环境变量。

五,安装Hive

1,上传、解压Hive安装包
2,配置环境变量:

export SPARK_HOME=/opt/module/spark
export PATH=$PATH:$SPARK_HOME/bin

3,hive安装目录下,创建如下文件

hive/conf/spark-defaults.conf

内容如下,指定提交spark任务的各种参数:

spark.master                               yarn
spark.eventLog.enabled                   true
spark.eventLog.dir                        hdfs://node1:8080/spark-history
spark.executor.memory                    1g
spark.driver.memory					   1g

4,创建上一步配置中的hdfs文件夹,存储历史日志

hadoop fs -mkdir /spark-history

5,将纯净版的spark3.0.0的jar上传到hdfs,所谓纯净版,就是没有掺杂hadoop和hive的jar包。主要原因是spark3.0.0默认支持的hadoop和hive都是2.x.x,hive3在将物理执行计划转换为spark任务时会使用到spark的jar包,如果这里的jar包含了hive2的jar包,会出现冲突,所以不适用集群上安装的spark自带的jar包,而是将纯净版的sparkjar包上传到hdfs上,作为hive的专用包。

先创建hdfs文件夹:

hadoop fs -mkdir /spark-jars

6,上传纯净版spark jar到hdfs

hadoop fs -put spark-3.0.0-bin-without-hadoop/jars/* /spark-jars

7,hive配置文件指定使用spark引擎和spark jar包位置

vim /opt/module/hive/conf/hive-site.xml

<property>
    <name>spark.yarn.jars</name>
    <value>hdfs://hadoop102:8020/spark-jars/*</value>
</property>
  
<property>
    <name>hive.execution.engine</name>
    <value>spark</value>
</property>

六,测试

  • 启动hive客户端
 bin/hive
  • 创建一张测试表
hive (default)> create table student(id int, name string);
  • 通过insert测试效果
hive (default)> insert into table student values(1,'abc');

出现如下界面表示整合成功:

在这里插入图片描述

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小手追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值