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

本文涉及的产品
对象存储 OSS,20GB 3个月
文件存储 NAS,50GB 3个月
对象存储 OSS,内容安全 1000次 1年
简介: 本文档主要介绍在挂载文件存储HDFS版的 Hadoop 集群上安装及使用 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.gzmkdir 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 SDKtar -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
exportTEZ_CONF_DIR=${HADOOP_HOME}/etc/hadoop/tez-site.xml
exportTEZ_JARS=/opt/module/tez-0.9.2
exportHADOOP_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 并集群同步
<?xmlversion="1.0" encoding="UTF-8"?><?xml-stylesheettype="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.gzmkdir 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 SDKtar -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 并集群同步
<?xmlversion="1.0" encoding="UTF-8"?><?xml-stylesheettype="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


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


  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版技术交流群。

目录
相关文章
|
域名解析 分布式计算 资源调度
在文件存储 HDFS 上使用 Apache Flink
本文主要为大家介绍在文件存储HDFS上搭建及使用Apache Flink的方法。
1727 0
在文件存储 HDFS 上使用 Apache Flink
|
存储 Apache
《海量数据分布式存储——Apache HDFS之最新进展》电子版地址
海量数据分布式存储——Apache HDFS之最新进展
56 0
《海量数据分布式存储——Apache HDFS之最新进展》电子版地址
|
存储 缓存 监控
Apache Flume- 案例-监控采集文件夹变化(sqoopdir、HDFS)|学习笔记
快速学习 Apache Flume- 案例-监控采集文件夹变化(sqoopdir、HDFS)
Apache Flume- 案例-监控采集文件夹变化(sqoopdir、HDFS)|学习笔记
|
SQL 分布式计算 资源调度
apache tez 编译安装与验证
本文介绍apache tez 编译安装与验证
apache tez 编译安装与验证
|
分布式计算 资源调度 Hadoop
在文件存储HDFS版上使用 Apache HBase
本文档主要介绍在文件存储HDFS版上使用 Apache HBase 的方法。
250 0
|
分布式计算 资源调度 Hadoop
在文件存储HDFS版上使用 Apache Flink
本文档主要介绍如何在挂载文件存储HDFS版的 Hadoop 集群上安装及使用 Flink。
483 0
|
分布式计算 资源调度 Hadoop
在文件存储HDFS版上使用 Apache Spark
本文档主要介绍如何在挂载文件存储HDFS版的 Hadoop 集群上安装及使用 Spark。
366 0
|
分布式计算 Apache Hadoop
|
资源调度 API Apache
|
存储 大数据 Apache
海量数据分布式存储--Apache HDFS之最新进展
本文PPT来自Intel研发经理、Hadoop committee成员郑锴于10月16日在2016年杭州云栖大会上发表的《海量数据分布式存储--Apache HDFS》。
3090 0

相关实验场景

更多

推荐镜像

更多