在文件存储HDFS版上使用 Apache Tez

一 目的

本文档主要介绍在挂载文件存储HDFS的 Hadoop 集群上安装及使用 Tez。


二 背景信息

Apache Tez 是构建在 Hadoop Yarn 之上支持分布式 DAG(Directed Acyclic Graph)的计算框架,支持通过复杂的DAG描述并处理大数据任务。Tez 主要使用在Apache Hive 中,作为 Hive 的一种执行引擎。与 Hive on MR(MapReduce)相比,Hive on Tez 具有更好的查询性能和稳定性。


三 准备工作

  1. 开通文件存储HDFS版服务并创建文件系统实例和挂载点,详细文档请参见:快速入门
  2. 在Hadoop集群所有节点上安装JDK。版本不低于 1.8。
  3. 在Hadoop集群中配置文件存储HDFS版实例,详细文档请参见:挂载文件系统
  4. 在本文档中使用的 Apache Hadoop 版本为 2.8.5。使用的 Tez 版本为 0.9.2。

说明:为避免兼容性问题,使用 Tez 时需要按照集群 Hadoop 版本重新编译。详细编译步骤参考 Tez 官网文档:Tez 安装


四 安装 Tez

在Tez 官网文档*有三种安装方式,异同如下。本文档主要以方式一进行安装使用,详细的安装步骤参考 Tez 官网文档:Tez 安装

安装方式

描述

在文件存储HDFS上使用Tez

方式一
(官网推荐)

  1. Tez 安装在 Hadoop 集群时使用本身预打包的 Hadoop 依赖
  2. 支持Hadoop集群滚动升级

需要将文件存储HDFS版 Java SDK 放到 Tez 的依赖中

方式二

  1. Tez 安装在 Hadoop 集群时中时使用集群环境中的 Hadoop 依赖
  2. 不支持Hadoop集群滚动升级

如果Hadoop 环境中已配置文件存储HDFS版则不需要额外配置

方式三

  1. Tez 安装在 Hadoop 集群时使用额外的 Hadoop 依赖
  2. 支持Hadoop集群滚动升级

需要将文件存储HDFS版 Java SDK 放到 Tez 的依赖中或者额外的 Hadoop 依赖中

4.1 方式一 (官网推荐方式)

第三章节准备工作中对 Tez 编译后有如下两个压缩包

tez-dist/target/tez-0.9.2-minimal.tar.gz // 最小压缩包,仅包含 Tez 依赖
tez-dist/target/tez-0.9.2.tar.gz // 完整压缩包,包含 Tez 和 Hadoop 依赖
  1. 将编译好的完整压缩包上传至文件存储HDFS版目录下
## 解压已经编译好的完整压缩包 tez-0.9.2.tar.gz
mkdir tez-0.9.2
tar -zxvf tez-0.9.2.tar.gz -C tez-0.9.2/

## 将已下载的文件存储HDFS版 Java SDK 放到 tez-0.9.2/lib 目录下
cp aliyun-sdk-dfs-x.y.z.jar tez-0.9.2/lib

## 重新压缩
tar -zcvf tez-0.9.2.tar.gz -C tez-0.9.2/ .

## 查看压缩包中是否包含文件存储HDFS版 Java SDK
tar -ztvf tez-0.9.2.tar.gz | grep aliyun-sdk-dfs-x.y.z.jar

## 将包含最新文件存储HDFS版 Java SDK 的完整压缩包放到文件存储HDFS版实例目录下
hadoop fs -mkdir -p /apps/tez-0.9.2
hadoop fs -put tez-0.9.2.tar.gz /apps/tez-0.9.2
  1. ${HADOOP_HOME}/etc/hadoop 下新建文件 tez-site.xml 并同步到集群所有节点
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>tez.lib.uris</name>
        <value>${fs.defaultFS}/apps/tez-0.9.2/tez-0.9.2.tar.gz</value>
    </property>
    <property>
        <name>tez.use.cluster.hadoop-libs</name>
        <value>false</value>
    </property>
</configuration>
  1. 客户端节点添加 Tez 依赖库,将编译好的最小压缩包解压到本地目录,并将该目录同步到集群所有节点
mkdir -p /opt/module/tez-0.9.2
tar -xvzf tez-0.9.2-minimal.tar.gz -C /opt/module/tez-0.9.2
  1. 在 Hadoop Classpath 中添加 tez-site.xml 配置及最小压缩包解压后的 Jar 文件,并同步修改到集群所有节点
## 在 hadoop-env.sh 文件末尾添加如下内容
vim ${HADOOP_HOME}/etc/hadoop/hadoop-env.sh

export TEZ_CONF_DIR=${HADOOP_HOME}/etc/hadoop/tez-site.xml
export TEZ_JARS=/opt/module/tez-0.9.2
export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:${TEZ_CONF_DIR}:${TEZ_JARS}/*:${TEZ_JARS}/lib/*

4.2 方式二

与方式一章节中的 1 和 2 步骤不同,其他一致

  1. 将编译好的 Tez 最小压缩包上传至文件存储HDFS版目录下
hadoop fs -mkdir -p /apps/tez-0.9.2-minimal
hadoop fs -put tez-0.9.2-minimal.tar.gz /apps/tez-0.9.2-minimal
  1. 在 ${HADOOP_HOME}/etc/hadoop 下新建文件 tez-site.xml 并集群同步
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>tez.lib.uris</name>
        <value>${fs.defaultFS}/apps/tez-0.9.2-minimal/tez-0.9.2-minimal.tar.gz</value>
    </property>
    <property>
        <name>tez.use.cluster.hadoop-libs</name>
        <value>true</value>
    </property>
</configuration>
  1. 剩余安装步骤参考方式一中的第 3 和第 4 步

4.3 方式三

与方式一章节中的 1 和 2 步骤不同,其他一致

使用该方式需要重新编译 Hadoop , 获取 hadoop-dist/target/hadoop-x.y.z.tar.gz 压缩包

  1. 将编译好的 Tez 最小压缩包 和 依赖的 Hadoop 压缩包上传至文件存储HDFS版目录下
## 解压已经编译好的最小安装包 tez-0.9.2-minimal.tar.gz
mkdir tez-0.9.2-minimal-new tez-0.9.2-minimal
tar -zxvf tez-0.9.2-minimal.tar.gz -C tez-0.9.2-minimal/

## 将已下载的文件存储HDFS版 Java SDK 放到 tez-0.9.2-minimal/lib 目录下
cp aliyun-sdk-dfs-x.y.z.jar tez-0.9.2-minimal/lib

## 重新压缩
tar -zcvf tez-0.9.2-minimal-new/tez-0.9.2-minimal.tar.gz -C tez-0.9.2-minimal/ .

## 查看压缩包中是否包含文件存储HDFS版 Java SDK
tar -ztvf tez-0.9.2-minimal-new/tez-0.9.2-minimal.tar.gz | grep aliyun-sdk-dfs-x.y.z.jar

## 将包含最新文件存储HDFS版 Java SDK 的压缩包放到文件存储HDFS版实例目录下
hadoop fs -mkdir -p /apps/tez-0.9.2-minimal
hadoop fs -put tez-0.9.2-minimal-new/tez-0.9.2-minimal.tar.gz /apps/tez-0.9.2-minimal
## 将 Hadoop 编译后的 hadoop-dist/target/hadoop-x.y.z.tar.gz 压缩包放到文件存储HDFS版 目录下
hadoop fs -mkdir -p /apps/hadoop-2.8.5
hadoop fs -put hadoop-dist/target/hadoop-2.8.5.tar.gz /apps/hadoop-2.8.5
  1. 在 ${HADOOP_HOME}/etc/hadoop 下新建文件 tez-site.xml 并集群同步
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>tez.lib.uris</name>
        <value>${fs.defaultFS}/apps/tez-0.9.2-minimal/tez-0.9.2-minimal.tar.gz#tez,${fs.defaultFS}/apps/hadoop-2.8.5/hadoop-2.8.5.tar.gz#hadoop-mapreduce</value>
    </property>
    <property>
        <name>tez.use.cluster.hadoop-libs</name>
        <value>false</value>
    </property>
    <property>
        <name>tez.lib.uris.classpath</name>
        <value>./tez/*:./tez/lib/*:./hadoop-mapreduce/hadoop-2.8.5/share/hadoop/common/*:./hadoop-mapreduce/hadoop-2.8.5/share/hadoop/common/lib/*:./hadoop-mapreduce/hadoop-2.8.5/share/hadoop/hdfs/*:./hadoop-mapreduce/hadoop-2.8.5/share/hadoop/hdfs/lib/*:./hadoop-mapreduce/hadoop-2.8.5/share/hadoop/yarn/*:./hadoop-mapreduce/hadoop-2.8.5/share/hadoop/yarn/lib/*:./hadoop-mapreduce/hadoop-2.8.5/share/hadoop/mapreduce/*:./hadoop-mapreduce/hadoop-2.8.5/share/hadoop/mapreduce/lib/*</value>
    </property>
</configuration>
  1. 剩余安装步骤参考方式一中的第 3 和第 4 步

五 验证

  1. 测试集群 Tez 引擎上的任务是否可用
## 生成测试数据
${HADOOP_HOME}/bin/hadoop jar  ${HADOOP_HOME}/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar \
randomtextwriter \
-D mapreduce.randomtextwriter.totalbytes=10240 \
-D mapreduce.randomtextwriter.bytespermap=1024 \
dfs://f-xxxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/input

## 在本地解压的 Tez 最小压缩包中包含 tez-examples-0.9.2.jar
${HADOOP_HOME}/bin/hadoop jar /opt/module/tez-0.9.2/tez-examples-0.9.2.jar orderedwordcount   dfs://f-xxxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/input dfs://f-xxxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/output

查看作业执行引擎是否为 TEZ

在文件存储HDFS版上使用 Apache Tez

在文件存储HDFS版上使用 Apache Tez


  1. 测试集群 MapReduce 引擎上的任务是否可用
${HADOOP_HOME}/bin/hadoop jar ${HADOOP_HOME}/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.8.5-tests.jar sleep -mt 1 -rt 1 -m 1 -r 1

在文件存储HDFS版上使用 Apache Tez


  1. Hive 验证
## 使用 mapreduce 引擎进行测试
hive> SET hive.execution.engine=mr;
hive> DROP TABLE IF EXISTS user_info_test;
hive> CREATE TABLE user_info_test(user_id BIGINT, firstname STRING, lastname STRING, country STRING);
hive> INSERT INTO user_info_test VALUES(1,'Dennis','Hu','CN'),(2,'Json','Lv','Jpn'),(3,'Mike','Lu','USA');
hive> SELECT country,count(*) FROM user_info_test GROUP BY country;

在文件存储HDFS版上使用 Apache Tez

## 使用 tez 引擎进行测试
hive> SET hive.execution.engine=tez;
hive> DROP TABLE IF EXISTS user_info_test;
hive> CREATE TABLE user_info_test(user_id BIGINT, firstname STRING, lastname STRING, country STRING);
hive> INSERT INTO user_info_test VALUES(1,'Dennis','Hu','CN'),(2,'Json','Lv','Jpn'),(3,'Mike','Lu','USA');
hive> SELECT country,count(*) FROM user_info_test GROUP BY country;

在文件存储HDFS版上使用 Apache Tez


了解更多关于文件存储HDFS版的产品信息,欢迎访问https://www.aliyun.com/product/alidfs

如果您对文件存储HDFS版有任何问题,欢迎钉钉扫描以下二维码加入文件存储HDFS版技术交流群。

在文件存储HDFS版上使用 Apache Tez

上一篇:在文件存储HDFS版上使用 Apache HBase


下一篇:在文件存储HDFS版上使用 Presto