1. 程式人生 > >Hive2.1.0整合Tez

Hive2.1.0整合Tez

image

Tez是什麼?

Tez是Hontonworks開源的支援DAG作業的計算框架,它可以將多個有依賴的作業轉換為一個作業從而大幅提升MapReduce作業的效能。Tez並不直接面向終端使用者——事實上它允許開發者為終端使用者構建效能更快、擴充套件性更好的應用程式

如何編譯

Tez最新的版本是0.8.4,本文就記錄下Tez的編譯過程,之前的Tez版本都是原始碼包,最新的版本雖然提供了編譯後的tar包,但是大部分情況下是針對特定的Hadoop版本,如果和我們的Hadoop版本不一致,可能某個時刻會出現一些未知的問題,所以為了穩定,還是建議和自己使用的Hadoop版本匹配,所以就需要編譯了。

(1)解壓完畢,修改根目錄下的pom.xml,修改對應的Hadoop的版本。

(2)註釋掉tez-ui2的子專案依賴pom,因為tez ui2編譯坑比較多,可能通不過

(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依賴。

(5)能不能自己在linux上單獨裝nodejs,然後讓tez的nodejs用本機裝的那個而避免下載牆外的,經實測發現不行,tez裡面的nodejs好像是單獨依賴的,只要編譯就會下載,最好的辦法就是註釋掉和tez-ui相關的東西

上面的一切搞定後,開始執行編譯命令:

mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true

編譯成功後,截圖如下:

image

如何與Hive整合

(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整合成功!

image

然後,你無需改動任何一行原來寫過的SQL的程式碼,直接切換引擎為Tez,效能就會提升數倍,越是複雜的SQL,提升效能越明顯,最後,你就可以早點下班回家了陪老婆了。

有什麼問題可以掃碼關注微信公眾號:我是攻城師(woshigcs),在後臺留言諮詢。 
技術債不能欠,健康債更不能欠, 求道之路,與君同行。