Tez是Hontonworks开源的支持DAG做业的计算框架,它能够将多个有依赖的做业转换为一个做业从而大幅提高MapReduce做业的性能。Tez并不直接面向最终用户——事实上它容许开发者为最终用户构建性能更快、扩展性更好的应用程序java
Tez最新的版本是0.8.4,本文就记录下Tez的编译过程,以前的Tez版本都是源码包,最新的版本虽然提供了编译后的tar包,可是大部分状况下是针对特定的Hadoop版本,若是和咱们的Hadoop版本不一致,可能某个时刻会出现一些未知的问题,因此为了稳定,仍是建议和本身使用的Hadoop版本匹配,因此就须要编译了。node
下载源码后:http://ftp.kddilabs.jp/infosystems/apache/tez/0.8.4/linux
(1)解压完毕,修改根目录下的pom.xml,修改对应的Hadoop的版本。web
(2)注释掉tez-ui2的子项目依赖pom,由于tez ui2编译坑比较多,可能通不过apache
(3)若是你是root用户编译Tez,记得修改tez-ui/pom.xml,添加容许root权限执行nodejs安装bower微信
<execution> <id>Bower install</id> <phase>generate-sources</phase> <goals> <goal>exec</goal> </goals> <configuration> <workingDirectory>${webappDir}</workingDirectory> <executable>${node.executable}</executable> <arguments> <argument>node_modules/bower/bin/bower</argument> <argument>install</argument> <argument>--allow-root</argument> //添加的部分 <argument>--remove-unnecessary-resolutions=false</argument> </arguments> </configuration> </execution>
(4)注意编译的linux机器最好能fan qiang下载东西,若是不能就把根目录下的pom.xml中tez-ui也注释掉,由于无论是tez-ui仍是tez-ui2都须要下载nodejs相关的东西,默认的是在墙外的,不能fan出去80%的概率会编译失败,因此若是是nodejs相关的编译失败,就把tez-ui相关的子项目都注释掉不让参与编译,这个ui没什么大的做用,就是看下job的计划,没有它也能使用Tez优化DAG依赖。app
(5)能不能本身在linux上单独装nodejs,而后让tez的nodejs用本机装的那个而避免下载墙外的,经实测发现不行,tez里面的nodejs好像是单独依赖的,只要编译就会下载,最好的办法就是注释掉和tez-ui相关的东西框架
上面的一切搞定后,开始执行编译命令:webapp
mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true
编译成功后,截图以下:maven
(1)编译成功后,进入下面的目录
/root/apache-tez-0.8.4-src/tez-dist/target
能够看到tez编译的相关的jar包都在这里,有一个mini的最小包,还有一个包含全部Hado op相对fat包,咱们只须要将mini包里面全部的jar包,拷贝到hive的/lib目录下
(2)将tez-0.8.4.tar.gz重命名为tez.tar.gz 而后执行下面的命令上传的根目录下面
hadoop fs -put tez.tar.gz /user/search/
(3) 而后启动Hive并切换为Tez引擎,执行下面的查询语句:
set hive.execution.engine=tez; select name,count(*) as c from info group by name order by c desc ;
会看到控制台出现下面的很nice的进度条时,就表明Tez集成成功!
而后,你无需改动任何一行原来写过的SQL的代码,直接切换引擎为Tez,性能就会提高数倍,越是复杂的SQL,提高性能越明显,最后,你就能够早点下班回家了陪女友了。
有什么问题能够扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。