参考文章:
https://www.jianshu.com/p/9fb9f32e1f0f
http://tez.apache.org/releases/apache-tez-0-9-1.html
准备工作:
hadoop版本:3.0.0-cdh6.0.1
hive版本:hive-2.1.1
linux环境:
jdk1.8
maven-3.6
protobuf-2.5.0.tar.gz // https://github.com/protocolbuffers/protobuf/releases
tez-0.9.1源码 //http://www.apache.org/dyn/closer.lua/tez/0.9.1/
windows环境:
jdk1.8
maven-3.3.9
protoc-2.5.0-win32.zip // https://github.com/protocolbuffers/protobuf/releases
tez-0.9.1源码 //http://www.apache.org/dyn/closer.lua/tez/0.9.1/
1.首先安装jdk :version》=1.8
2.安装maven:解压即用,配置环境变量
linux:
解压到/usr/local/maven
export MVN_HOME=/usr/local/maven
export PATH=$MVN_HOME/bin:$PATH
windows:
系统环境变量:
M2_HOME=D:\tool\maven3
MAVEN_HOME=D:\tool\maven3
PATH路径:
%M2_HOME%\bin
检查安装:
mvn -v
3.protobuf安装:
linux:
解压:
tar -zxvf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0
./configure
make
make install
protoc --version #验证是否安装成功
备注:当configure校验不通过的时候,缺少哪些包就安装,一般需要安装gcc
windows:
直接解压protoc-2.5.0-win32.zip,得到一个exe文件,直接设置该文件的环境变量即可
PATH:
D:\tool\protoc-2.5.0-win32
protoc --version #验证是否安装成功
4.tez解压以及文件修改
linux:
tar -zxvf apache-tez-0.9.1-src.tar.gz
修改pom文件:
直接拖到windows修改比较快,本次tez编译选择的是通过windows编译,因为有些包下载很慢,就通过windows开启svn代理,编译较快。
但还是有些包下载失败,主要是clouder的相关包,只好通过直接访问该网站,下载对应的jar包,然后放入maven仓库即可。以下包通过网站直接下载的
修改为我们cdh所用版本:3.0.0-cdh6.0.1
添加Cloudera的Maven仓库地址【因为Hadoop环境版本为CDH版本】
注释掉tez-ext-service-tests、tez-ui这两个模块,国外网下载慢
修改后的pom.xml
<properties>
<maven.test.redirectTestOutputToFile>true</maven.test.redirectTestOutputToFile>
<clover.license>${user.home}/clover.license</clover.license>
<hadoop.version>3.0.0-cdh6.0.1</hadoop.version>
<jetty.version>6.1.26</jetty.version>
<netty.version>3.6.2.Final</netty.version>
<pig.version>0.13.0</pig.version>
<javac.version>1.8</javac.version>
<slf4j.version>1.7.10</slf4j.version>
<enforced.java.version>[${javac.version},)</enforced.java.version>
<distMgmtSnapshotsId>apache.snapshots.https</distMgmtSnapshotsId>
<distMgmtSnapshotsName>Apache Development Snapshot Repository</distMgmtSnapshotsName>
<distMgmtSnapshotsUrl>https://repository.apache.org/content/repositories/snapshots</distMgmtSnapshotsUrl>
<distMgmtStagingId>apache.staging.https</distMgmtStagingId>
<distMgmtStagingName>Apache Release Distribution Repository</distMgmtStagingName>
<distMgmtStagingUrl>https://repository.apache.org/service/local/staging/deploy/maven2</distMgmtStagingUrl>
<failIfNoTests>false</failIfNoTests>
<protobuf.version>2.5.0</protobuf.version>
<protoc.path>${env.PROTOC_PATH}</protoc.path>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<scm.url>scm:git:https://git-wip-us.apache.org/repos/asf/tez.git</scm.url>
<build.time>${maven.build.timestamp}</build.time>
<frontend-maven-plugin.version>1.4</frontend-maven-plugin.version>
<findbugs-maven-plugin.version>3.0.1</findbugs-maven-plugin.version>
<javadoc-maven-plugin.version>2.10.4</javadoc-maven-plugin.version>
<shade-maven-plugin.version>2.4.3</shade-maven-plugin.version>
</properties>
<scm>
<connection>${scm.url}</connection>
</scm>
<distributionManagement>
<repository>
<id>${distMgmtStagingId}</id>
<name>${distMgmtStagingName}</name>
<url>${distMgmtStagingUrl}</url>
</repository>
<snapshotRepository>
<id>${distMgmtSnapshotsId}</id>
<name>${distMgmtSnapshotsName}</name>
<url>${distMgmtSnapshotsUrl}</url>
</snapshotRepository>
</distributionManagement>
<repositories>
<repository>
<id>${distMgmtSnapshotsId}</id>
<name>${distMgmtSnapshotsName}</name>
<url>${distMgmtSnapshotsUrl}</url>
</repository>
<repository>
<id>nexus</id>
<name>Team Nexus Repository</name>
<url>http://192.168.0.203:8081/repository/maven-public/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
<name>Cloudera Repositories</name>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>maven2-repository.atlassian</id>
<name>Atlassian Maven Repository</name>
<url>https://maven.atlassian.com/repository/public</url>
<layout>default</layout>
</pluginRepository>
<pluginRepository>
<id>${distMgmtSnapshotsId}</id>
<name>${distMgmtSnapshotsName}</name>
<url>${distMgmtSnapshotsUrl}</url>
<layout>default</layout>
</pluginRepository>
<pluginRepository>
<id>cloudera</id>
<name>Cloudera Repositories</name>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</pluginRepository>
</pluginRepositories>
参考的博客说要修改tez-mapreduce模块下的源码文件,但修改后报错,所以这次编译不需要修改代码即可。
5.maven编译
mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true
发现编译太慢,以为是下载包太缓慢了,但是后面通过在windows上打开源码编译时,才发现,其实是项目中很多的tests文件报错,导致编译不通过,同时编译执行的testwe年耗费很长时间。
maven指令应该修改为
mvn clean package -Dmaven.javadoc.skip=true -Dmaven.test.skip=true
这样才会跳过test编译,很快就编译完成!
编译后的文件在tez-dist/target下面
6.部署到HDFS
创建文件:
hdfs dfs -mkdir /user/tez
将tez-0.9.1.tar.gz上传至hdfs
hdfs dfs -put tez-0.9.1.tar.gz /user/tez/
文件权限(可不修改)
hdfs dfs -chmod -R 777 /user/tez/
7.创建tez-site.xml,配置客户端
在CDH的lib目录下创建tez:
一般CDH6的安装目录都在该地方
cd /opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/
mkdir tez
cd tez
mkdir conf
vi tez-site.xml
<configuration>
<property>
<name>tez.lib.uris</name>
<value>${fs.defaultFS}/user/tez/tez-0.9.1.tar.gz</value>
</property>
<property>
<name>tez.use.cluster.hadoop-libs</name>
<value>false</value>
</property>
</configuration>
将tez-0.9.1-minimal文件夹下的jar及lib下的jar拷贝到tez中
从 /opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/jars中拷贝kryo-2.22.jar到tez文件夹下的lib文件夹下,防止出现以下异常:
java.lang.ClassNotFoundException: com.esotericsoftware.kryo.Serializer
tez/lib中包含slf4j的jar包,会打印较多日志,可以在客户端中去掉slf4j-api-1.7.10.jar、slf4j-log4j12-1.7.10.jar这两个jar包,减少日志打印,
到这里就客户端的基本配置结束。
将 tez这个文件就 copy的集群中的其他主机的cloudera目录下
scp /opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/tez root@drgs2:/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/
8.配置hive环境变量
在cdh找到hive客户端配置
内容如下:
HADOOP_CLASSPATH=/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/tez/conf:/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/tez/*:/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/tez/lib/*
然后保存并部署客户端配置,这样配置的环境变量才会生效。
重启完成后,tez安装完成。
9。测试
hive //进入hive cli
hive> set hive.tez.container.size=3020;
hive> set hive.execution.engine=tez;
hive> use db_cd_yb;
hive>select count(1) from ks05_modify;
备注:
1.如果maven使用nexus私服下载的话,还需要在nexus中添加CDH的远程仓库地址,不然会报找不jar包。
2.如果报跑tez任务的是报classnotfound,可以试着在hadoop-env.sh的最后添加tez的位置。
vi /etc/hadoop/conf/hadoop-env.sh
TEZ_CONF_DIR=/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/tez/conf/tez-site.xml
TEZ_JARS=/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/tez
export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:${TEZ_CONF_DIR}:${TEZ_JARS}/*:${TEZ_JARS}/lib/*