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的源码进⾏编译
2、源码编译过程中hadoop中需要使⽤protobuf,需要下载protobuf-2.5.0
其中window版本使⽤protoc-2.5.0-win32.zip,直接解压,然后配置到环境变量中就可以了。
liunx版本使⽤protobuf-2.5.
3、使⽤window编译,需要下载git bash,然后使⽤git命令来编译
⼆、编译tez
1、将apache-tez-0.9.解压,然后使⽤idea修改pom配置,第⼀处为修改,其余为添加
第⼀处:
<hadoop.version>3.0.0-cdh6.3.2</hadoop.version>
第⼆处:
<repository>
<id>cloudera</id>
<url>repository.cloudera/artifactory/cloudera-repos/</url>
<name>Cloudera Repositories</name>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
第三处:
<pluginRepository>
<id>cloudera</id>
<name>Cloudera Repositories</name>
<url>repository.cloudera/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编译时,报wInstance() 89⾏异常,使⽤另⼀个⽅法newInstance()⽅法
vim tez-mapreduce/src/main/java/org/apache/tez/mapreduce/client/NotRunningJob.java
wInstance(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 -st.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. /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
log4j2版本3.创建tez配置⽂件
l
<configuration>
<property>
<name>tez.lib.uris</name>
<value>${fs.defaultFS}/apps/tez-0.9.1/tez-0.9.</value>
</property>
<property>
<name>tez.use.cluster.hadoop-libs</name>
<value>false</value>
</property>
<property>
<name>tez.v</name>
<value>LD_LIBRARY_PATH=${PARCELS_ROOT}/CDH/lib/hadoop/lib/native</value>
</property>
<property>
<property>
<name>tez.v</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> ntainer.size=3020;
hive> ine=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,'');
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论