hive on tez运行及hive ha搭建

1. hive on tez运行

在Hive2.x版本起,Hive官方不再建议使用MapReduce作为底层默认执行引擎,推荐使用Tez或者Spark作为执行引擎(目前Hive4.0.0版本不支持Spark引擎),这些引擎相比于默认的MapReduce执行引擎执行任务时可以提升查询性能、降低延迟并优化资源利用,Hive4.x版本后可能会彻底弃用MapReduce引擎。

Apache Tez是一个开源分布式执行框架,专为处理复杂数据流任务而设计。它允许将多个依赖任务转化为单一的有向无环图(DAG)作业,从而大幅提升性能。Tez构建在Hadoop YARN之上,主要用于提升Hive应用的查询处理性能,替代传统的MapReduce执行引擎,实现更高效的数据处理。

Tez能够将过去需要多个MapReduce作业的数据处理任务,现在简化为一个Tez作业。这种改进不仅简化了作业管理,还显著提升了执行性能。

1.0 前置依赖

hive搭建和启动脚本https://blog.csdn.net/weixin_62206215/article/details/152001251?spm=1011.2124.3001.6209

1.1 下载并上传tez

从tez官网下载tez,地址:https://tez.apache.org/releases/index.html,这里选择的tez版本为0.10.3版本,下载好的安装包名称为"apache-tez-0.10.3-bin.tar.gz"。

将tez安装包下载后,上传至hadoop101节点/opt/software目录下并解压:

复制代码
#上传并解压至/software目录下
[root@hadoop101 ~]# ls /opt/software/ | grep apache-tez*
apache-tez-0.10.3-bin
apache-tez-0.10.3-bin.tar.gz

1.2 将tez安装包上传至HDFS路径中

后续在Hive中使用tez时需要获取tez 相关库文件,需要指定tez安装包,这里在HDFS中创建tez目录,然后将tez安装包上传至HDFS该路径中。

复制代码
#HDFS中创建tez目录
[root@hadoop101 software]# hdfs dfs -mkdir /tez

#上传tez安装包到HDFS/tez目录中
[root@hadoop101 software]# hdfs dfs -put ./apache-tez-0.10.3-bin.tar.gz /tez/tez.tar.gz

1.3 配置tez-site.xml

在HIVE_HOME/conf目录下创建tez-site.xml文件,配置如下内容:

复制代码
<configuration>
  <!--指定Tez库文件的位置 -->
  <property>
    <name>tez.lib.uris</name>
    <value>hdfs://mycluster/tez/tez.tar.gz</value>
  </property>
  <!--是否使用集群上的Hadoop库 -->
  <property>
    <name>tez.use.cluster.hadoop-libs</name>
    <value>true</value>
  </property>
</configuration>

也可在该配置文件中加入如下配置项指定tez使用的资源情况:

复制代码
... ...  
  <!-- 设置Tez Application Master的内存大小(以MB为单位)-->
  <property>
    <name>tez.am.resource.memory.mb</name>
    <value>1024</value>
  </property>
  <!-- 设置Tez Application Master的CPU核心数量 -->  
  <property>
    <name>tez.am.resource.cpu.vcores</name>
    <value>1</value>
  </property>
  <!-- 设置Tez容器最大Java堆内存占总内存的比例 -->
  <property>
    <name>tez.container.max.java.heap.fraction</name>
    <value>0.4</value>
  </property>
  <!-- 设置Tez任务的内存大小(以MB为单位) -->
  <property>
    <name>tez.task.resource.memory.mb</name>
    <value>1024</value>
  </property>
  <!-- 设置Tez任务的CPU核心数量 -->
  <property>
    <name>tez.task.resource.cpu.vcores</name>
    <value>1</value>
  </property>
... ...

1.4 准备tez jars

在HIVE_HOME/目录中创建jars目录,将tez安装包中的所有jar放入到该目录中,后续Hive On Tez需要使用到这些jar包。

复制代码
#在node1 HIVE_HOME中创建jars目录
[root@hadoop101 ~]# mkdir -p /opt/module/hive-4.0.0/jars

#将所有tez相关jar放入到HIVE_HOME/jars目录下
[root@hadoop101 ~]# cp /opt/software/apache-tez-0.10.3-bin/*.jar /opt/module/hive-4.0.0/jars
[root@hadoop101 ~]# cp /opt/software/apache-tez-0.10.3-bin/lib/*.jar /opt/module/hive-4.0.0/jars

1.5 配置hive-env.sh

配置HIVE_HOME/conf/hive-env.sh文件,在最后配置"HIVE_AUX_JARS_PATH"属性指定Tez jar路径为HIVE_HOME/jars路径。

复制代码
... ...
export HIVE_AUX_JARS_PATH=/opt/module/hive-4.0.0/jars
... ...

1.6 配置hive-site.xml使用tez引擎

在hive-site.xml中最后加入如下配置项使用tez引擎。

复制代码
... ...
  <property>
    <name>hive.execution.engine</name>
    <value>tez</value>
  </property>
... ...

1.7 重启Hive Metastore和HiveServer服务进行测试

重启Hive Metastore和HiveServer服务。

复制代码
[root@hadoop101 conf]# hive-service.sh restart
------------------------------------------------------------
正在重启 Hive 服务...
------------------------------------------------------------
正在停止 Hive hiveserver2...
成功:Hive hiveserver2 (PID: 16388) 已停止。
------------------------------------------------------------
正在停止 Hive metastore...
成功:Hive metastore (PID: 16257) 已停止。
------------------------------------------------------------
------------------------------------------------------------
正在启动 Hive metastore...
成功:Hive metastore 已启动。
日志文件: /opt/module/hive-4.0.0/logs/metastore.log
------------------------------------------------------------
正在启动 Hive hiveserver2...
成功:Hive hiveserver2 已启动。
日志文件: /opt/module/hive-4.0.0/logs/hiveserver2.log
------------------------------------------------------------

在Hive客户端beeline登录hive进行测试:

复制代码
[root@hadoop101 conf]# beeline -u jdbc:hive2://hadoop101:10000 -n root

#查看默认使用执行引擎
0: jdbc:hive2://hadoop101:10000> set hive.execution.engine;
+----------------------------+
|            set             |
+----------------------------+
| hive.execution.engine=tez  |
+----------------------------+
1 row selected (0.315 seconds)

2. hive ha搭建

在使用Hive过程中,如果Hive服务端hiveserver2 服务挂掉之后,我们就不能使用beeline方式连接Hive。这时我们需要对hiveserver2进行高可用部署,这就是Hive HA 高可用。Hive从0.14开始,使用Zookeeper实现了HiveServer2的HA功能(ZooKeeper Service Discovery),Client端可以通过指定一个nameSpace来连接HiveServer2,而不是指定某一个host和port。

Hive高可用部署我们这里选择hadoop101、hadoop102两台节点为hiveserver2服务节点,也就是hive服务端,hadoop103节点是Hive客户端,具体搭建Hive HA步骤如下:

2.1 在hadoop101节点上配置hive-site.xml

复制代码
<configuration>
  <property>  
    <name>hive.metastore.warehouse.dir</name>  
    <value>/user/hive_ha/warehouse</value>  
  </property>  
  <property>  
    <name>javax.jdo.option.ConnectionURL</name>  
    <value>jdbc:mysql://hadoop101:3305/hive_ha?createDatabaseIfNotExist=true&useSSL=false&allowPublicKeyRetrieval=true</value>  
  </property>  
  <property>  
    <name>javax.jdo.option.ConnectionDriverName</name>  
    <value>com.mysql.jdbc.Driver</value>  
  </property>   
  <property>  
    <name>javax.jdo.option.ConnectionUserName</name>  
    <value>root</value>  
  </property>  
  <property>  
    <name>javax.jdo.option.ConnectionPassword</name>  
    <value>123456</value>  
  </property>
  
  <!-- 指定HiveServer2 端口 -->
  <property>
    <name>hive.server2.thrift.bind.host</name>
    <value>hadoop101</value>
  </property>
  <!-- 指定HiveServer2 端口 -->
  <property>
    <name>hive.server2.thrift.port</name>
    <value>10000</value> 
  </property>
  
  <!-- Hive Server2 HA 配置 -->
  <property>
    <name>hive.server2.support.dynamic.service.discovery</name>
    <value>true</value>
  </property>
  <property>
    <name>hive.server2.zookeeper.namespace</name>
    <value>hiveserver2_zk</value>
  </property>
  <property>
    <name>hive.zookeeper.quorum</name>
    <value>node3:2181,node4:2181,node5:2181</value>
  </property>
  <property>
    <name>hive.zookeeper.client.port</name>
    <value>2181</value>
  </property>
</configuration>

2.2 将hadoop101节点上的hive安装包发送到hadoop102节点

复制代码
[root@hadoop101 software]# scp -r /opt/module/hive-4.0.0/ hadoop102:`pwd`

2.3 在hadoop102节点上修改hive-site.xml配置文件

将hiveserver2 host绑定的节点修改为hadoop102节点。

复制代码
... ...
<!-- 指定HiveServer2 端口 -->
  <property>
    <name>hive.server2.thrift.bind.host</name>
    <value>hadoop102</value>
  </property>
... ...

2.4 初始化Hive

在hadoop101节点或者 hadoop102任意一台节点初始化Hive

复制代码
[root@hadoop101 ~]# schematool -dbType mysql -initSchema

2.5 启动Hive Metastore和HiveServer2服务

在hadoop101、hadoop102节点启动Metastore和HiveServer2服务。

然后再客户端中将"hive.metastore.uris"配置为"thrift://hadoop101:9083,thrift://hadoop102:9083"就能实现metastore服务的高可用。

2.6 在Hive客户端node3节点上通过beeline连接hive

配置Hive Server2 HA 后通过beeline连接Hive格式如下:jdbc:hive2://hadoop集群地址/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=,zookeeper的端口可以省略,默认就是2181。

复制代码
[root@node3 ~]# beeline -u "jdbc:hive2://hadoop101,hadoop102,hadoop103/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_zk" -n root

2.7 测试ha

在Hive中建表并插入数据:

复制代码
#Hive中建表及插入数据
create table person(id int ,name string ,age int) row format delimited fields terminated by '\t';
insert into person values (1,'zs',18),(2,'ls',19),(3,'ww',20);

#查询表中数据
select * from person;
+------------+--------------+-------------+
| person.id  | person.name  | person.age  |
+------------+--------------+-------------+
| 1          | zs           | 18          |
| 2          | ls           | 19          |
| 3          | ww           | 20          |
+------------+--------------+-------------+

可以将连接的hadoop101和hadoop102节点上hiveserver2 服务kill掉其中一个,然后继续通过beeline进行查询,可以正常查询。注意:测试hiveserver2HA ,当一个hiveserver2 挂掉之后,我们需要重新登录beeline 通过jdbc方式连接Hive。

复制代码
#kill 掉hadoop101节点的hiveserver2进程
[root@hadoop101 software]# kill -9 70736(根据自己的runjar进程kill)


#在hadoop103再次登录beeline 查询hive表中数据
[root@hadoop103 ~]# beeline -u "jdbc:hive2://hadoop101,hadoop102,hadoop103/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_zk" -n root
select * from person;
+------------+--------------+-------------+
| person.id  | person.name  | person.age  |
+------------+--------------+-------------+
| 1          | zs           | 18          |
| 2          | ls           | 19          |
| 3          | ww           | 20          |
+------------+--------------+-------------+
相关推荐
RestCloud8 小时前
PostgreSQL的数据集成之路:ETL+CDC实现实时多源聚合
数据库·数据仓库·postgresql·etl·数据处理·数据传输·数据同步
笨蛋少年派11 小时前
操作Hadoop时,慎用sudo
大数据·hadoop·分布式
hrrrrb13 小时前
【Spring Security】Spring Security 密码编辑器
java·hive·spring
二进制_博客1 天前
spark on hive 还是 hive on spark?
大数据·hive·spark
IT毕设梦工厂1 天前
大数据毕业设计选题推荐-基于大数据的人体生理指标管理数据可视化分析系统-Hadoop-Spark-数据可视化-BigData
大数据·hadoop·信息可视化·spark·毕业设计·源码·bigdata
云淡风轻~~1 天前
构建和部署Spark、Hadoop与Zeppelin集成环境
大数据·hadoop·spark
IT研究室1 天前
大数据毕业设计选题推荐-基于大数据的人体体能活动能量消耗数据分析与可视化系统-大数据-Spark-Hadoop-Bigdata
大数据·hadoop·数据分析·spark·毕业设计·源码·bigdata
大叔_爱编程2 天前
基于Python的交通数据分析应用-hadoop+django
hadoop·python·django·毕业设计·源码·课程设计·交通数据分析
Kay_Liang2 天前
数据仓库入门:从超市小票看懂数仓
数据仓库·笔记·数据分析