这几天要求应用tez在Hadoop和Hive上运行,参考了官网和网上的一些资料,今天终于能运行tez方式的Hadoop和Hive.
软件版本:
Hadoop:Hadoop-2.7.1
Hive:apache-hive-1.2.1-bin
Tez:apache-tez-0.5.4-src 最新的0.7的tez版本编译有些问题,这个版本的是可以通过的
Tez 编译方法:(只需要在一个节点安装tez就好,配置也是只在一个节点配置就OK)
1.cd apache-tez-0.5.4-src
2.vim pom.xml 在这里面找到Hadoop的版本,改成自己集群的Hadoop版本
3.mvn compile
4.mvn clean package -Dtar -DskipTests=true -Dmaven.javadoc.skip=true
5.编译成功后将在/apache-tez-0.5.4-src/tez-dist/target 路径下发现tez-0.5.4.tar.gz
6.解压tez-0.5.4.tar.gz 会发现如下文件
7.在Hadoop_HOME的share文件下建立文件夹tez,将上图的tez的文件放进新建文件中
mv tez-0.5.4.tar.gz $Hadoop_HOME/share/tez 之后 tar -zxvf tez-0.5.4.tar.gz && rm -fr tez-0.5.4.tar.gz
8.将解压的tez上传到HDFS hadoop dfs -mkdir /tez
hadoop dfs -put tez/* /tez/
9.修改相关配置:
在 $Hadoop_HOME/etc/hadoop 中增加 tez-site.xml
tez.lib.uris的两个路径分别是解压后tez的两个路径
如果你的hadoop是2.2.0的增加如下:
<configuration>
<property>
<name>tez.lib.uris</name>
<value>/tez/lib,/tez/</value>
</property>
</configuration>
要是2.6.0以上的增加如下:
<property>
<name>tez.lib.uris</name>
<value>${fs.default.name}/tez,${fs.default.name}/tez/lib/</value>
</property>
<property>
<name>tez.am.resource.memory.mb</name>
<value>1024</value>
</property>
10.将mapre-site.xml中的
mapreduce.framework.name的格式从yarn改为yarn-tez
<property>
<name>mapreduce.framework.name</name>
<value>yarn-tez</value>
</property>
11.将hadoop-env.sh 中添加如下:
export TEZ_CONF_DIR=$HADOOP_HOME/etc/hadoop/tez-site.xml
export TEZ_JARS=$HADOOP_HOME/share/tez
export HADOOP_CLASSPATH=${CLASSPATH}:$TEZ_CONF_DIR:$TEZ_JARS/*:$TEZ_JARS/lib/*
12.之后重新启动Hadoop
运行随便一个example例子则可,网页信息如下:
已经不是mapreduce而是TEZ的形式了
而Hive运行成功如下:
首先要进入hive
选择运行格式:
set hive.execution.engine=tez;
之后运行sql语句就可以
运行结果如下:
之后提供下编译好的tez的包,免得编译不过的同学停在编译上