Tez 安装
配置
- 操作系统:Mac OS 10.11.6
- JDK: Oracle JDK 1.7.0_72
- Hadoop: Apache Hadoop 2.6.5
- Tez: Apache Tez 0.7.1
- Tomcat: Apache Tomcat 8.5.6
- protoc: Google Protobuf 2.5.0
以上配置,JDK 和 Hadoop 自行安装,Hadoop 的 namenode 和 Yarn 配置可顺利运行即可。Protobuf 必须是2.5.0,我个人笔记本之前装的是 3.0.0,可以编译,但是不能顺利运行(因为 Hadoop 内部的 Protobuf 都是2.5.0版本)。
编译 Tez
下载 Tez
http://apache.fayea.com/tez/0.7.1/
上面是 Apache 的一个国内镜像,下载较快。我个人下载的是 src 版本的。因为默认的编译版很可能不是基于 Hadoop 2.6.5 的版本。而我个人笔记本上安装的是 Hadoop 2.6.5,因此有必要自行编译。
mvn clean compile package -DskipTests -Dhadoop.version=2.6.5
顺利的话,在 tez-dist/target 下有编译的 tez-0.7.1.tar.gz 的压缩包。可以使用压缩软件打开,如果内部 lib 选的 hadoop jar 不是2.6.5,可以自行把 jar 压缩进去。
tez 0.7 编译需要 nodejs 支持,如果没有安装 nodejs 的,可以下载官方打包的 bin.tar.gz, 下载下来后,打开lib, 并把自己 hadoop libs 压缩到一起。
注意:手工压缩 tez-0.7.1.tar.gz 时,去掉自带的文本文件,及 tez-ui-0.7.1.war 文件,并在 lib 下加入如下 jar:
-rw-rw-r-- 1 zhenqin staff 40471 11 1 12:00 hadoop-annotations-2.6.5.jar
-rw-rw-r-- 1 zhenqin staff 90610 11 1 12:00 hadoop-auth-2.6.5.jar
-rw-rw-r-- 1 zhenqin staff 3354982 11 1 12:00 hadoop-common-2.6.5.jar
-rw-rw-r-- 1 zhenqin staff 7944061 11 1 12:00 hadoop-hdfs-2.6.5.jar
-rw-rw-r-- 1 zhenqin staff 688209 11 1 12:01 hadoop-mapreduce-client-common-2.6.5.jar
-rw-rw-r-- 1 zhenqin staff 1537966 11 1 12:01 hadoop-mapreduce-client-core-2.6.5.jar
-rw-rw-r-- 1 zhenqin staff 1896185 11 1 12:00 hadoop-yarn-api-2.6.5.jar
-rw-rw-r-- 1 zhenqin staff 151865 11 1 12:00 hadoop-yarn-client-2.6.5.jar
-rw-rw-r-- 1 zhenqin staff 1629101 11 1 12:00 hadoop-yarn-common-2.6.5.jar
-rw-r--r-- 1 zhenqin staff 319579 10 3 07:50 hadoop-yarn-server-common-2.6.5.jar
-rw-r--r-- 1 zhenqin staff 52240 10 3 07:50 hadoop-yarn-server-web-proxy-2.6.5.jar
Tez On Yarn
上文打包的 tez-0.7.1.tar.gz 上传一份到 hdfs,我的 hdfs 上传目录为: /lib/tez/tez-0.7.1.tar.gz
- 解压 tez-0.7.1.tar.gz 到本地,并给 Hadoop claspath 加入 tez 的 lib;
编辑 etc/hadoop/hadoop-env.sh
export TEZ_JARS="/Users/zhenqin/software/tez"
for f in $TEZ_JARS/*.jar; do
if [ "$HADOOP_CLASSPATH" ]; then
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$f
else
export HADOOP_CLASSPATH=$f
fi
done
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:${TEZ_JARS}/lib/*
copy core-site.xml 为 tez-site.xml 并加入如下内容
测试 Tez
完成上述两个步骤后,就可以进行 countword 测试 tez 是否能正确运行:
cd tez
hadoop jar tez-examples-0.7.1.jar orderedwordcount /input/LICENSE.txt /tezout
上述测试,/input/LICENSE.txt 是一个文本文件,我这里为了方便直接把 Apache License 上传到 HDFS。执行上述测试,如果能看到 DAG completed. FinalState=SUCCEEDED
表示 tez 安装成功。
执行成功后可以看到 hdfs /tezout下的统计字符的输出。
Tez TimeLine UI
有了上述安装成功的步骤后,你的 Hive,Pig 都可以使用 tez 引擎了(Hive Pig 使用 tez 引擎后边会单独介绍)。Tez 团队开发了一个 UI,可以方便开发人员查看。
上文提到,下载 tez tag 中有个 tez-ui-0.7.1.war 的 web 项目,该项目就是 tez 的 ui, 需要下载一个 tomcat 来运行。
下载 tomcat 后,在 tomcat 的 webapps 下创建一个 tez-ui 的文件夹,并把 tez-ui-0.7.1.war 以 zip 的解压方式解压到 tez-ui 目下。编辑 webapps/tez-ui/scripts/configs.js, 修改为:
timelineBaseUrl: 'http://localhost:8188',
RMWebUrl: 'http://localhost:8088',
启动 tomcat,可以看到 tez-ui 已经启动。但是这时并不能看到 Tez 的执行 job,这需要 yarn 的 timeline 支持。
编辑 yarn-site.xml
<!-- conf timeline server -->
<property>
<name>yarn.timeline-service.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.timeline-service.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.timeline-service.http-cross-origin.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.system-metrics-publisher.enabled</name>
<value>true</value>
</property>
编辑 tez-site.xml
<property>
<description>Enable Tez to use the Timeline Server for HistoryLogging</description>
<name>tez.history.logging.service.class</name>
<value>org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingService</value>
</property>
<property>
<name>tez.allow.disabled.timeline-domains</name>
<value>true</value>
</property>
重启 hadoop yarn, 并启动 yarn 的 timeline server。
sbin/stop-yarn.sh
sbin/start-yarn.sh
sbin/yarn-daedom.sh start historyserver
这时,再次运行 orderedwordcount 的测试,去刷新 tez-ui,可以看到漂亮的 tez-ui 管理界面。