• CDH6.3.2版本搭建Tez执行引擎过程


    一、准备工作

      hive本身支持hive on mr、hive on spark 和hive on tez三种执行引擎,CDH6.3.x及其以下版本都没有支持tez执行引擎,需要使用的话需要单独引入。由于CDH的hadoop版本进行了改造,因此tez的开源release版本不能直接使用,需要集成CDH的hadoop版本。

    1、下载tez的源码进行编译

      http://www.apache.org/dyn/closer.lua/tez/0.9.2/

    2、源码编译过程中hadoop中需要使用protobuf,需要下载protobuf-2.5.0

     https://github.com/protocolbuffers/protobuf/releases

    其中window版本使用protoc-2.5.0-win32.zip,直接解压,然后配置到环境变量中就可以了。

     liunx版本使用protobuf-2.5.0.tar.gz

    3、使用window编译,需要下载git bash,然后使用git命令来编译

    二、编译tez

    1、将apache-tez-0.9.2-src.tar.gz解压,然后使用idea修改pom配置,第一处为修改,其余为添加

    第一处:
    <hadoop.version>3.0.0-cdh6.3.2</hadoop.version>
    第二处:
    <repository>
      <id>cloudera</id>
      <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
      <name>Cloudera Repositories</name>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
    第三处:
    <pluginRepository>
      <id>cloudera</id>
      <name>Cloudera Repositories</name>
      <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
    </pluginRepository>
    第四处:
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-client</artifactId>
      <version>1.19</version>
    </dependency>
    第五处:
    <!--<module>tez-ext-service-tests</module>
    <module>tez-ui</module>-->
    注:将这两个注释掉,如果有需要可以不用注释

    2、修改mapreduce的java文件

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

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

    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);
    注:可以先进行编译,如果报这个错再进行修改这一步也行

    3、使用git bash进入到源码目录,然后执行如下maven命令编译

    mvn clean package -Dmaven.javadoc.skip=true -Dmaven.test.skip=true
    注:这样会跳过test编译,很快就编译完成

    4、编译完后的地址,cd  tez-dist/target

     三、集成到CDH6.3.2版本中

    1、将tez的jar包上传到hdfs中

    1. 创建目录
    hadoop fs -mkdir /tez 2. 上传到hdfs
    hadoop fs -put tez-0.9.2.tar.gz /tez

    2、将tez整合到hive中,集群中的每台服务器都需要操作

    1.进到cdh的lib包目录
    cd /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib 2.创景tez目录
    mkdir tez 3.创建tez配置文件
    vim tez
    -site.xml
    <configuration> <property> <name>tez.lib.uris</name> <value>${fs.defaultFS}/apps/tez-0.9.1/tez-0.9.1.tar.gz</value> </property> <property> <name>tez.use.cluster.hadoop-libs</name> <value>false</value> </property>

     <property>
      <name>tez.am.launch.env</name>
      <value>LD_LIBRARY_PATH=${PARCELS_ROOT}/CDH/lib/hadoop/lib/native</value>
      </property>
     <property>

     <property>
     <name>tez.task.launch.env</name>
     <value>LD_LIBRARY_PATH=${PARCELS_ROOT}/CDH/lib/hadoop/lib/native</value>
     </property>

    </configuration>

    3、拷贝jar包

      tez-0.9.2-minimal文件夹下的jar及lib下的jar拷贝到tez中
    4、避免kryo的错误:
       java.lang.NoClassDefFoundError: com/esotericsoftware/shaded/org/objenesis/strategy/InstantiatorStrategy

     4.1 cd /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/hive/auxlib
     4.2 mv hive-exec-2.1.1-cdh6.3.2-core.jar hive-exec-2.1.1-cdh6.3.2-core.jar.bck
     4.3 mv hive-exec-core.jar hive-exec-core.jar.bck

     4.4 从 /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

      4.5 tez/lib中包含slf4j的jar包,会打印较多日志,可以在客户端中去掉slf4j-api-1.7.10.jar、slf4j-log4j12-1.7.10.jar这两个jar包,减少日志打印,

    5、配置hive的env配置文件
     5.1 添加:HADOOP_CLASSPATH=/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/tez/conf:/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/tez/*:/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/tez/lib/*
     5.2 部署客户端配置
     5.3 重启需要组件

    内容如下:

    HADOOP_CLASSPATH=/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.590678/lib/tez/conf:/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.590678/lib/tez/*:/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.590678/lib/tez/lib/*
    然后保存并部署客户端配置,这样配置的环境变量才会生效。

     6、测试

    hive //进入hive cli

    hive> set hive.tez.container.size=3020;

    hive> set hive.execution.engine=tez;

    执行left join的语句

    SELECT
    A.CalDate,
    A.InnerCode,
    A.SecuCode,
    A.SecuAbbr,
    A.SecuMarket,
    A.RuleCode,
    A.RuleDesc,
    2 AS DataFlag
    FROM TMP_DWD_PC_INT_ZM_StockPoolComponent A
    JOIN DWD_PC_INT_ZM_StockPoolComponent B ON A.CalDate=B.CalDate AND A.RuleCode=B.RuleCode AND A.SecuCode=B.SecuCode AND NVL(A.SecuMarket,0)=NVL(B.SecuMarket,0)
    AND B.DELDATE='99991231'
    WHERE NVL(A.InnerCode,0)<>NVL(B.InnerCode,0)
    OR NVL(A.SecuAbbr,'')<>NVL(B.SecuAbbr,'')
    OR NVL(A.RuleDesc,'')<>NVL(B.RuleDesc,'');





  • 相关阅读:
    如果获取 上传域的文件名
    更改织梦后台广告
    html5 让IE6,7支持HTML5语义化标签的文件
    如何获取选中的复选框
    手机下的ev.pageX无效
    Ajax
    列出远程git的全部分支
    扫描局域网中Gogs服务器(ruby)
    Xcode删除无用的Symbols信息
    Docker
  • 原文地址:https://www.cnblogs.com/chhyan-dream/p/15569184.html
Copyright © 2020-2023  润新知