一 目的
本文档主要介绍在挂载文件存储HDFS版的 Hadoop 集群上安装及使用 Tez。
二 背景信息
Apache Tez 是构建在 Hadoop Yarn 之上支持分布式 DAG(Directed Acyclic Graph)的计算框架,支持通过复杂的DAG描述并处理大数据任务。Tez 主要使用在Apache Hive 中,作为 Hive 的一种执行引擎。与 Hive on MR(MapReduce)相比,Hive on Tez 具有更好的查询性能和稳定性。
三 准备工作
- 开通文件存储HDFS版服务并创建文件系统实例和挂载点,详细文档请参见:快速入门。
- 在Hadoop集群所有节点上安装JDK。版本不低于 1.8。
- 在Hadoop集群中配置文件存储HDFS版实例,详细文档请参见:挂载文件系统。
- 在本文档中使用的 Apache Hadoop 版本为 2.8.5。使用的 Tez 版本为 0.9.2。
说明:为避免兼容性问题,使用 Tez 时需要按照集群 Hadoop 版本重新编译。详细编译步骤参考 Tez 官网文档:Tez 安装
四 安装 Tez
在Tez 官网文档*有三种安装方式,异同如下。本文档主要以方式一进行安装使用,详细的安装步骤参考 Tez 官网文档:Tez 安装
安装方式 |
描述 |
在文件存储HDFS版上使用Tez |
方式一 |
|
需要将文件存储HDFS版 Java SDK 放到 Tez 的依赖中 |
方式二 |
|
如果Hadoop 环境中已配置文件存储HDFS版则不需要额外配置 |
方式三 |
|
需要将文件存储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 依赖
- 将编译好的完整压缩包上传至文件存储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
- 在
${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>
- 客户端节点添加 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
- 在 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 步骤不同,其他一致
- 将编译好的 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
- 在 ${HADOOP_HOME}/etc/hadoop 下新建文件 tez-site.xml 并集群同步
<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>
- 剩余安装步骤参考方式一中的第 3 和第 4 步
4.3 方式三
与方式一章节中的 1 和 2 步骤不同,其他一致
使用该方式需要重新编译 Hadoop , 获取 hadoop-dist/target/hadoop-x.y.z.tar.gz
压缩包
- 将编译好的 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_HOME}/etc/hadoop 下新建文件 tez-site.xml 并集群同步
<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>
- 剩余安装步骤参考方式一中的第 3 和第 4 步
五 验证
- 测试集群 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
- 测试集群 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
- 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;
## 使用 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版的产品信息,欢迎访问https://www.aliyun.com/product/alidfs
如果您对文件存储HDFS版有任何问题,欢迎钉钉扫描以下二维码加入文件存储HDFS版技术交流群。