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>