1. 我的安装环境:
a) hadoop2.2.0
b) probuf2.5.0 , probuf的安装可参考:http://blog.csdn.net/guoyilongedu/article/details/17093811
c) Tez-0.2.0
2. 安装Tez
a) 下载,Tez http://tez.incubator.apache.org/install.html
b) 解压 ,tar –xvf tar -xvf tez-0.2.0-incubating.tar.gz.解压之后会得到目录tez-0.2.0-incubating,若不加特殊说明,下面的操作都是在这个目录下
进行。
c) 编译,编译之前注意修改pom.xml中的相关配置,主要是把hadoop.version和protobuf.version修改成你环境下的版本号。
编译时执行:
mvn clean install -DskipTests=true-Dmaven.javadoc.skip=true
d) 编译完之后的需要将部分文件上传到hdfs,需要上传的文件在目录{YOUR_PATH}/tez-0.2.0-incubating/tez-dist/target/tez-0.2.0/tez-0.2.0下面,上传
到hdfs的位置随意。
比如如果我们上传到hdfs的位置是/tez-0.2.0,那么上传命令如下
hadoop fs –put /tez-dist/target/tez-0.2.0/tez-0.2.0 /tez-0.2.0
e) 新建tez-site.xml.添加如下配置:
其中value的内容为你刚才上传到hdfs上的位置,注意是两个path,用逗号隔开,一个是包含lib下jar的path,一个是包含lib和tez-api.jar的path。
<configuration>
<property>
<name>tez.lib.uris</name>
<value>/tez-0.2.0/lib,/tez-0.2.0/</value>
</property>
</configuration>
f) 修改hadoop的配置文件mapred-site.xml,修改mapreduce.framework.name的值yarn为yarn-tez:
<property>
<name>mapreduce.framework.name</name>
<value>yarn-tez</value>
</property>
g) 修改hadoop的class path,添加以下两个路径:
i. tez-site.site的路径
ii. TEZ_JARSand TEZ_JARS/libs
一种设置hadoop classpath 的方法是,在hadoop-env.sh中添加:
export CLASSPATH=${CLASSPATH}:$your-path
3. 运行测试:
其中tez-mapreduce-examples-0.2.0.jar 在 tez-0.2.0-incubating/tez-mapreduce-examples/target目录下,下面语句也是在这个目录下执行的
hadoop jar tez-mapreduce-examples-0.2.0.jar orderedwordcount <input> <output>
4. 相关说明:
a) 在2.e步中,tez-site.xml文件是不存在的,需要自己创建,但是我按照上面的操作完成了之后,执行程序的时候会报错:
Exception in thread "main"org.apache.tez.dag.api.TezUncheckedException: Invalid configuration of tezjars, tez.lib.uris is not defined in the configurartion。
出现这个问题显然是因为tez没找到tez-site.xml文件的原因,我查了下hadoop的classpath,发现明明已经添加了路径,所以错误原因我也没搞清楚。
我的解决办法是,把tez-site.xml直接放到hadoop_conf_dir($HADOOP_PREFIX/etc/hadoop)下面,在执行的时候就不报错了。
b) 在2.f步中,修改了mapred-site.xml文件,在没安装tez的机器上执行MR程序的时候会报错:
ERROR security.UserGroupInformation:PriviledgedActionException as:nyarn (auth:SIMPLE) cause:java.io.IOException:Cannot initialize Cluster. Please check your configuration formapreduce.framework.name and the correspond server addresses.
这属于正常现象,解决办法就是要不在这台机器上也配上tez,要不就把程序的执行语句放到年撞了Tez的机器上来运行。要注意的是,在有Tez的机器上仍然可
以运行之前写过的MR程序。
c) 安装完成之后,再执行MR或者其他yarn上的程序,application type就会写成tez,如下图所示
--转自