温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
Fayson的github:
https://github.com/fayson/cdhproject
提示:代码块部分可以左右滑动查看噢
1.文档编写目的
在上一篇文章Fayson介绍了《
非Kerberos环境下Hive2.2.0 On Tez集成
》,使用Apache官网默认编译好的0.8.5版本的Tez,默认的版本使用的依赖包是开源的Hadoop依赖,当与CDH集群的Hive2集成时会有依赖包版本问题,导致Hive2的MR不能使用以及Kerberos环境下执行异常问题。在官网提供了编译Tez的方法,本篇文章Fayson主要介绍如何编译一个适用于CDH集群的Tez并与Kerberos环境下的Hive2.2.0集成。
在学习本篇文章内容你还需要知道:
《
如何在CDH集群中安装Hive2.3.3
》
《
如何为Hive2启用Kerberos认证
》
《
Hive2.2.0如何与CDH集群中的Spark1.6集成
》
《
非Kerberos环境下Hive2.2.0 On Tez集成
》
- 文章概述
1.环境准备及编译
2.集成Kerberos环境Hive2及测试
3.总结
- 本次Fayson的测试环境为
1.CM和CDH版本为5.15
2.Redhat7.3
3.JDK1.8.0_141
4.Hive版本为2.2.0
5.Tez版本为0.8.5
2.编译环境准备
这一步的环境准备,主要是用于编译Tez,准备一台可以访问外网环境的集群,配置编译Tez的依赖环境:
- JDK8或更高版本
- Maven3或更高版本
- Protobuf2.5.0(注意:必须为这个版本)
1.配置JDK8环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_131 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tool.jar:$CLASSPATH
(可左右滑动)
验证Java环境
2.配置Maven环境
export MVN_HOME=/usr/local/maven export PATH=$MVN_HOME/bin:$PATH
(可左右滑动)
验证Maven环境
3.安装编译环境依赖的OS包
[root@cdh05 build-tools]# yum -y install gcc gcc-c++ libstdc++-devel make build
(可左右滑动)
4.安装Protobuf2.5.0,需要通过源码的方式编译安装
下载Protobuf2.5.0的源码包,地址如下:
https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz
(可左右滑动)
将下载下来的protobuf-2.5.0.tar.gz解压,进入protobuf-2.5.0目录
[root@cdh05 tez-0.8.5]# tar -zxvf protobuf-2.5.0.tar.gz [root@cdh05 tez-0.8.5]# cd protobuf-2.5.0/
(可左右滑动)
执行如下命令编译并安装
[root@cdh05 protobuf-2.5.0]# ./configure [root@cdh05 protobuf-2.5.0]# make & make install
(可左右滑动)
验证是否安装成功
[root@cdh05 tez-0.8.5]# protoc --version
(可左右滑动)
3.编译Tez0.8.5
1.从Apache官网或GitHub上下载0.8.5版本的源码包地址如下:
http://apache.claz.org/tez/0.8.5/apache-tez-0.8.5-src.tar.gz https://github.com/apache/tez/archive/rel/release-0.8.5.tar.gz
(可左右滑动)
以上两个地址任意选择一个即可
2.将下载的release-0.8.5.tar.gz解压
[root@cdh05 tez-0.8.5]# tar -zxvf release-0.8.5.tar.gz
(可左右滑动)
3.进入tez-rel-release-0.8.5修改pom.xml文件,主要是将Hadoop的依赖修改为CDH提供的依赖及去掉tez-ui的模块
将hadoop.version的版本修改为自己CDH的版本,Fayson使用的CDH版本为5.15.0,所以这里的版本号为2.6.0-cdh5.15.0
在pom.xml文件中添加Cloudera的Maven仓库地址,内容如下:
<repositories> <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>cloudera</id> <name>Cloudera Repositories</name> <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url> </pluginRepository> </pluginRepositories>
(可左右滑动)
屏蔽tez-ext-service-tests、tez-ui、tez-ui2三个模块暂不做编译
修改完成功后保存配置文件。
4.修改tez-mapreduce模块下的源码文件
[root@cdh05 tez-rel-release-0.8.5]# vi tez-mapreduce/src/main/java/org/apache/tez/mapreduce/hadoop/mapreduce/JobContextImpl.java
(可左右滑动)
在JobContexImpl.java类最后增加如下方法:
/** * Get the boolean value for the property that specifies which classpath * takes precedence when tasks are launched. True - user's classes takes * precedence. False - system's classes takes precedence. * @return true if user's classes should take precedence */ @Override public boolean userClassesTakesPrecedence() { return getJobConf().getBoolean(MRJobConfig.MAPREDUCE_JOB_USER_CLASSPATH_FIRST, false); }
(可左右滑动)
5.完成如上操作后,在/data/disk1/tez-rel-release-0.8.5目录下执行如下命令进行编译
[root@cdh05 tez-rel-release-0.8.5]# mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true
(可左右滑动)
如上图所示表示Tez编译成功。
4.Hive2集成Tez
集群是Kerberos环境的,这里需要先Kinit下
2.将tez-dist/target目录下的tez-0.8.5.tar.gz压缩包部署至HDFS上
[root@cdh05 tez-rel-release-0.8.5]# cd tez-dist/target [root@cdh05 target]# hadoop fs -mkdir -p /engine/tez-0.8.5/ [root@cdh05 target]# hadoop fs -put tez-0.8.5.tar.gz /engine/tez-0.8.5/ [root@cdh05 target]# hadoop fs -chmod -R 777 /engine [root@cdh05 target]# hadoop fs -ls /engine/tez-0.8.5
(可左右滑动)
2.在{HIVE_HOME}/conf目录下创建tez-site.xml文件,内容如下:
[root@cdh04 conf]# vim tez-site.xml <configuration> <property> <name>tez.lib.uris</name> <value>/engine/tez-0.8.5/tez-0.8.5.tar.gz</value> </property> </configuration>
(可左右滑动)
注意:tez.lib.uris配置的路径为上一步tez-0.8.5.tar.gz压缩包部署的HDFS路径。同样tez-site.xml文件需要拷贝至HiveServer2和HiveMetastore服务所在节点的相应目录下。
3.将tez-dist/target/tez-0.8.5目录下和lib目录下的所有jar包拷贝至{HIVE_HOME}/lib目录下
[root@cdh05 tez-0.8.5]# pwd /data/disk1/tez-release-0.8.5-rc1/tez-dist/target/tez-0.8.5 [root@cdh04 tez-0.8.5]# scp -r *.jar /opt/cloudera/HIVE2/lib/ [root@cdh04 tez-0.8.5]# scp -r lib/*.jar /opt/cloudera/HIVE2/lib/ [root@cdh04 tez-0.8.5]# ll /opt/cloudera/HIVE2/lib/tez-*
(可左右滑动)
注意:将编译好的tez-dist/target/tez-0.8.5目录拷贝至Hive2服务的部署节点上,然后再将tez-0.8.5目录及lib目录下的所有Jar包拷贝至{HIVE_HOME}/lib目录下。
4.完成如上操作后,重启HiveServer和HiveMetastore服务
[root@cdh04 ~]# hive2 [root@cdh04 ~]# netstat -apn |grep 9083 [root@cdh04 ~]# hive2-server [root@cdh04 ~]# netstat -apn |grep 10000
(可左右滑动)
hive2和hive2-server命令在环境变量中配置了别名:
5.Hive2 On Tez测试
1.Kerberos环境,在命令行进行Kinit操作
2.使用hive命令测试
[root@cdh04 ~]# /opt/cloudera/HIVE2/bin/hive hive> SET hive.tez.container.size=3020; hive> set hive.execution.engine=tez; hive> select count(*) from test;
(可左右滑动)
3.使用Beeline测试
[root@cdh04 ~]# beeline2 Beeline version 2.2.0 by Apache Hive beeline> !connect jdbc:hive2://cdh04.fayson.com:10000/;principal=hive/cdh04.fayson.com@FAYSON.COM Transaction isolation: TRANSACTION_REPEATABLE_READ 0: jdbc:hive2://cdh04.fayson.com:10000/> SET hive.tez.container.size=3020; 0: jdbc:hive2://cdh04.fayson.com:10000/> set hive.execution.engine=tez; 0: jdbc:hive2://cdh04.fayson.com:10000/> select count(*) from test;
(可左右滑动)
4.访问Yarn的8080界面可以看到作业类型为TEZ
6.总结
1.Hive2 On Tez集成时需要确认Hadoop的版本,根据Hadoop的版本选择支持的Tez版本。
2.在CDH集群中集成Tez时需要进行重新编译,以避免Jar包版本不一致导致的问题。
提示:代码块部分可以左右滑动查看噢
为天地立心,为生民立命,为往圣继绝学,为万世开太平。
温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操
本文暂时没有评论,来添加一个吧(●'◡'●)