子曰:君子食无求饱,居无求安,敏于事而慎于言,就有道而正焉,可谓好学也已。
译文:君子吃不求太饱,住不求太舒适,做事勤快,说话谨慎,向道德高的人学习,并能改正自己的缺点,这样就可以称得上好学了。
最近要把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 是需要每台机器都需要部署的。