如何编译适用于CDH的Tez版本并集成Kerberos环境的Hive2

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实操(gh_c4c535955d0f)

原文发表时间:2018-09-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏牛肉圆粉不加葱

【容错篇】Spark Streaming的还原药水——Checkpoint

一个 Streaming Application 往往需要7*24不间断的跑,所以需要有抵御意外的能力(比如机器或者系统挂掉,JVM crash等)。为了让这成...

802
来自专栏企鹅号快讯

如何使用java代码通过JDBC访问Sentry环境下的Hive

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproje...

2829
来自专栏Hadoop实操

如何在CM中启用YARN的使用率报告

CDH的高级功能"群集利用率报告"(Cluster Utilization Report)是整个多租户方案体系里的一部分,可以用来查看租户的资源使用情况,并可以...

5195
来自专栏星汉技术

原 Spark的架构

3315
来自专栏Hadoop实操

Spark的HistoryServer不能查看到所有历史作业分析

Spark的HistoryServer能正常查看之前的历史作业日志,但新提交的作业在执行完成后未能在HistoryServer页面查看。

1.4K8
来自专栏个人分享

Hadoop on Yarn 各组件详细原理

  运行在独立的节点上的ResourceManager和NodeManager一起组成了yarn的核心,构建了整个平台。ApplicationMaster和相应...

1501
来自专栏Hadoop实操

如何在CDH集群外配置Kerberos环境的Spark2和Kafka客户端环境

2633
来自专栏实用工具入门教程

如何部署 Hadoop 集群

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。...

4342
来自专栏Hadoop实操

如何为Hive2启用Kerberos认证

3652
来自专栏Hadoop实操

如何为Spark应用启用Kerberos的Debug日志

在CDH集群启用了Kerberos后,在执行Spark作业时难免会遇到由于Kerberos认证问题导致作业运行失败的时候,那我们需要针对Spark作业进行调试,...

4103

扫码关注云+社区

领取腾讯云代金券