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),在後臺留言諮詢。 技術債不能欠,健康債更不能欠, 求道之路,與君同行。