Tez 0.9.1基于CDH 6.1.x安装部署

一、文档目的

近期在CDH 6.1.x中部署Tez 0.9.1,踩到很多坑,主要还是CDH集群版本较高,导致所用教程和实际部署不一致(自己挖的坑),希望给大家一个参考。

1.1 文章概述

  1. 环境准备及编译
  2. Tez安装与测试
  3. 总结

1.2 基础环境

  1. CM和CDH版本为 6.1.0
  2. Redhat 7.3
  3. JDK 1.8.0_191
  4. Hive版本为2.1.1
  5. Tez版本为0.9.1

二、基础环境准备

基础环境准备,用于编译Tez,包括JDK、Maven、Protobuf,请大家按需安装,具体如下:

  • JDK8或更高版本
  • Maven3或更高版本
  • Protobuf2.5.0(注意:必须为这个版本)

1.JDK安装

推荐rpm包安装,无需配置环境变量,如需配置环境变量如下所示:

export JAVA_HOME=/usr/java/jdk1.8.0_191
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tool.jar:$CLASSPATH

验证Java环境

source /etc/profile
java -version

2.maven安装

export MVN_HOME=/usr/local/maven
export PATH=$MVN_HOME/bin:$PATH

验证maven环境

source /etc/profile
mvn -v

3.protobuf-2.5.0安装

找到对应资源,下载压缩包。
解压

tar -zxvf protobuf-2.5.0.tar.gz

编译安装

cd protobuf-2.5.0
./configure
make
make install
protoc --version    #验证是否安装成功

三、Tez安装与测试

1.下载源码包

http://tez.apache.org/releases/apache-tez-0-9-1.html

2.解压

tar -zxvf apache-tez-0.9.1-src.tar.gz

3.修改pom.xml

将Hadoop的依赖修改为CDH提供的依赖:


    true
    ${user.home}/clover.license
    3.0.0-cdh6.1.0
    6.1.26
    3.6.2.Final
    0.13.0
    1.8
    1.7.10
    [${javac.version},)
    apache.snapshots.https
    Apache Development Snapshot Repository
    https://repository.apache.org/content/repositories/snapshots
    apache.staging.https
    Apache Release Distribution Repository
    https://repository.apache.org/service/local/staging/deploy/maven2
    false
    2.5.0
    ${env.PROTOC_PATH}
    UTF-8
    scm:git:https://git-wip-us.apache.org/repos/asf/tez.git
    ${maven.build.timestamp}
    1.4
    3.0.1
    2.10.4
    2.4.3
  

添加Cloudera的Maven仓库地址:


    
      ${distMgmtSnapshotsId}
      ${distMgmtSnapshotsName}
      ${distMgmtSnapshotsUrl}
    
    
            cloudera
            https://repository.cloudera.com/artifactory/cloudera-repos/
            Cloudera Repositories
            
              false
            
          
  

    
      maven2-repository.atlassian
      Atlassian Maven Repository
      https://maven.atlassian.com/repository/public
      default
    
    
      ${distMgmtSnapshotsId}
      ${distMgmtSnapshotsName}
      ${distMgmtSnapshotsUrl}
      default
    
            
            cloudera
            Cloudera Repositories
            https://repository.cloudera.com/artifactory/cloudera-repos/
          
  

修改jersey-client的版本到1.19


       com.sun.jersey
       jersey-client
       1.19

因为jersey-client 1.9 版本,使用编译生成的tez-0.9.1.tar.gz上传到hdfs后,会出现以下报错:

java.lang.NoSuchMethodError: com.sun.jersey.api.client.ClientResponse.getStatusInfo()Ljavax/ws/rs/core/Response$StatusType;

4.修改tez-mapreduce模块下的源码文件(先编译tez查看是否需要)

tez-mapreduce编译时,报ApplicationReport.newInstance() 89行异常,使用另一个方法newInstance()方法。

vi tez-mapreduce/src/main/java/org/apache/tez/mapreduce/client/NotRunningJob.java 

增加long launchTime参数(下面代码中三个0中,中间一个0)

return ApplicationReport.newInstance(unknownAppId, unknownAttemptId, "N/A",
        "N/A", "N/A", "N/A", 0, null, YarnApplicationState.NEW, "N/A", "N/A",
        0, 0, 0, FinalApplicationStatus.UNDEFINED, null, "N/A", 0.0f, "TEZ_MRR", null);

5.编译

mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true

build success表示成功,产出如下图:


image.png

6.部署至HDFS

tez-0.9.1.tar.gz相对路径为tez-dist/target

hdfs dfs -mkdir -p /apps/tez-0.9.1/
hdfs dfs -put tez-0.9.1.tar.gz /apps/tez-0.9.1/
hdfs dfs -chmod -R 777 /apps/tez-0.9.1/
hdfs dfs -ls /apps/tez-0.9.1/

7.创建tez-site.xml,配置客户端

在cdh包路径下创建tez包,我的路径是/opt/cloudera/parcels/CDH-6.1.0-1.cdh6.1.0.p0.770702/lib/tez
新建conf文件夹存放tez-site.xml


    
        tez.lib.uris
        ${fs.defaultFS}/apps/tez-0.9.1/tez-0.9.1.tar.gz
    
    
          tez.use.cluster.hadoop-libs
          false
    

tez-0.9.1-minimal文件夹下的jar及lib下的jar拷贝到tez中
结构如下:

image.png

从hadoop lib jars中拷贝kryo-2.22.jar到tez文件夹下的lib文件夹下,否则会出现以下异常:

java.lang.ClassNotFoundException: com.esotericsoftware.kryo.Serializer

tez/lib中包含slf4j的jar包,会打印较多日志,可以在客户端中去掉slf4j-api-1.7.10.jarslf4j-log4j12-1.7.10.jar这两个jar包,减少日志打印,在yarn/tez-ui中查看日志。
至此客户端配置完成,将/opt/cloudera/parcels/CDH-6.1.0-1.cdh6.1.0.p0.770702/lib/tez分发到所有节点,即完成客户端部署。

8.配置hive环境变量

通过cdh找到客户端配置:


image.png

配置如下:


image.png

保存并部署客户端配置。
重启完成后,tez安装完成。

9.测试

hive //进入hive cli
hive> set hive.tez.container.size=3020;
hive> set hive.execution.engine=tez;
hive> select count(*) from tableName;

执行结果如下:


image.png

yarn中的界面如下:


image.png

验证完成。

总结

  1. 在CDH集群中集成Tez时需要进行重新编译,以避免Jar包版本不一致导致的问题。
  2. CDH 不推荐用新版。

以上内容,仅个人实践,欢迎大家一块讨论。下一篇,进行tez-ui的部署说明。

参考链接:
http://tez.apache.org/install.html
https://cloud.tencent.com/developer/article/1349504
https://blog.csdn.net/sinat_37690778/article/details/80594571

你可能感兴趣的:(Tez 0.9.1基于CDH 6.1.x安装部署)