子曰:君子食無求飽,居無求安,敏於事而慎於言,就有道而正焉,可謂好學也已。
譯文:君子吃不求太飽,住不求太舒適,做事勤快,說話謹慎,向道德高的人學習,並能改正自己的缺點,這樣就可以稱得上好學了。
最近要把CDH的版本換成了5.3.0,hive的版本從0.12換成了0.13,升級完成后,簡單測試發現版本的升級對性能的影響非常大。hive在0.13中開始支持tez做為執行引擎來提高執行速度。
Tez 和 MR 的對比圖:
圖中可以看出原始的 MR 程序是多job 的DAG,每個job都會進行寫盤和讀盤操作,浪費了磁盤IO和網絡IO。 Tez則把多job的DAG改為單個job的DAG任務,減少的中間結果的操作。
Tez 的安裝部署:
hadoop版本:2.5.0
hive版本:0.13
tez版本:0.4.1
1.)下載tez源碼,地址:http://archive.apache.org/dist/incubator/tez/tez-0.4.1-incubating/
2.)編譯:
1:依賴環境
a、JDK 1.7 +
b、maven 3.0 +
c、ProtocolBuffer 2.5.0
2:修改pom.xml中的hadoop版本為對應的版本號 2.5.0
3:編譯命令:mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true 靜靜的等待吧..........
3.)上傳編譯后的Tez的tarball到集群的各個機器中,並解壓到自己想要安裝的目錄中。
4.)上傳tez解壓后的文件到HDFS中
。建立目錄 hadoop fs -mkdir /apps
。上傳文件 hadoop fs -put {TEZ_HOME} /apps/
5.)在hadoop的配置文件目錄中新建 tez-site.xml 配置文件
。添加配置 tez.lib.uris
1 <property>
2 <name>tez.lib.uris</name>
3 <value>${fs.defaultFS}/apps/tez,${fs.defaultFS}/apps/tez/lib</value>
4 </property>
6.)修改 mapred-site.xml
7.)在hadoop-env.sh 把 tez 的jar添加到HADOOP_CLASSPATH中
# TEZ class path export TEZ_HOME=/usr/lib/tez for jar in `ls $TEZ_HOME |grep jar`; do export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$TEZ_HOME/$jar
done for jar in `ls $TEZ_HOME/lib`; do export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$TEZ_HOME/lib/$jar
done
8.)至此 Tez 的部署結束,運行Tez的測試程序:hadoop jar tez-tests.jar testorderedwordcount <input> <output>
如果能正常運行,就說明部署成功了。
9.)修改hive的執行引擎為 Tez
1 <property> 2 <name>hive.execution.engine</name> 3 <value>tez</value> 4 </property>
到此 Tez 整合 CDH 5.3.0 已經大功告成了。開始進入穩定性測試和性能優化吧。
溫馨提示: Tez 是需要每台機器都需要部署的。
Tez官網: http://tez.apache.org/index.html