Apache Tez是一个源于MR的计算框架,将map和reduce进一步进行拆分,将job合并提交到yarn,性能比MR要好。
在CDH集成Apache Tez,可以通过以下步骤:
1. 对Apache Tez进行编译
2. 集成到HDFS
3. 集成到HIVE
注:安装包已经编译打包好,可直接从第二步查看,编译步骤可作为了解。
一、编译Tez
1、环境要求
最小内存:4GB
操作系统:仅支持以下操作系统,选择和CDH集群一样的操作系统即可
● Ubuntu 14.04、16.04、18.04
● CentOS 6/7
硬盘:20G
2、 下载Apache Tez 0.9.2
wget https://dlcdn.apache.org/tez/0.9.2/apache-tez-0.9.2-src.tar.gz
3、配置编译环境
maven如果配置过的可不用配置。
# 配置maven
tar zxf apache-maven-3.5.4-bin.tar.gz -C /usr/local
ln -s /usr/local/apache-maven-3.5.4-bin/mvn /usr/local/bin
4、安装protobuf
# yum安装相关开发依赖
yum install -y gcc gcc-c++
# 安装protobuf-2.5.0
tar zxf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0
./configure
make && make install
5、修改pom.xml文件
vim pom.xml
# 修改haddop版本
<hadoop.version>3.0.0-cdh6.3.2</hadoop.version>
# 添加cloudera源
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
<name>Cloudera Repositories</name>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
# 新增pluginRepository.cloudera
<pluginRepository>
<id>cloudera</id>
<name>Cloudera Repositories</name>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</pluginRepository>
# 注释tez-ui模块,不需要这个模块
<!--
<module>tez-ui</module>
-->
6、编译
# 编译
mvn clean package -Dmaven.javadoc.skip=true -Dmaven.test.skip=true
编译完成的包在tez-dist/target目录下
二、集成到CDH6
集成HDFS
hdfs dfs -mkdir /user/tez
hdfs dfs -put tez-dist/target/tez-0.9.2.tar.gz /user/tez
集成HIVE
1、将lib和相关jar包打包到cloudera目录
mkdir -p /opt/cloudera/parcels/CDH/lib/tez/conf
cp tez-dist/target/tez-0.9.2.tar.gz /opt/cloudera/parcels/CDH/lib/tez
cp -r tez-dist/target/tez-0.9.2-minimal/lib/ /opt/cloudera/parcels/CDH/lib/tez/
cp tez-dist/target/tez-0.9.2-minimal/*.jar /opt/cloudera/parcels/CDH/lib/tez/
2、创建配置文件
vim /opt/cloudera/parcels/CDH/lib/tez/conf/tez-site.xml
<configuration>
<property>
<name>tez.lib.uris</name>
<value>/user/tez/tez-0.9.2.tar.gz</value>
</property>
<property>
<name>tez.use.cluster.hadoop-libs</name>
<value>false</value>
</property>
</configuration>
3、分发/opt/cloudera/parcels/CDH/lib/tez到所有节点
4、CDH的hive包改造过,会优先加载CDH自己的相关类,集成Tez后会报kryo类找不到错误,需要进行以下修改:
cd /opt/cloudera/parcels/CDH/lib/hive/auxlib
mv hive-exec-2.1.1-cdh6.3.2-core.jar hive-exec-2.1.1-cdh6.3.2-core.jar.bak
5、在CM上配置环境变量
在gateway和hiveserver2上都配置上
HADOOP_CLASSPATH=/opt/cloudera/parcels/CDH/lib/tez/conf:/opt/cloudera/parcels/CDH/lib/tez/*:/opt/cloudera/parcels/CDH/lib/tez/lib/*
配置完成重启hive服务
手动设置hive引擎为Tez
使用beeline:
0: jdbc:hive2://node01:10000/> set hive.tez.container.size=3020;
No rows affected (0.124 seconds)
0: jdbc:hive2://node01:10000/> set hive.execution.engine=tez;
No rows affected (0.005 seconds)
0: jdbc:hive2://node01:10000/> select count(*) from dm_ods_db_dev.o_01_member_personal_info;
+------+
| _c0 |
+------+
| 478 |
+------+
1 row selected (12.494 seconds)
0: jdbc:hive2://node01:10000/>
使用hue:
观察yarn,application type为Tez
设置hive默认引擎为Tez
如果要设置默认引擎为Tez,修改hive-site.xml添加如下配置:
<property>
<name>hive.execution.engine</name>
<value>tez</value>
</property>
<property>
<name>hive.tez.container.size</name>
<value>4096</value>
</property>