CDH环境下安装Tez日志

基于hive的数仓,数据处理性能至关重要。

CDH的HADOOP集群,hive你可以选用mr,hive on spark两种引擎,我个人觉得,impala不算是hive的引擎,算是同步hive的元数据,另外一组件,有其优点,也有其严重的短板。

因此,为了处理性能,打算为hive再增加一种高效的引擎——TEZ。至于什么是tez,网上一大堆,就不赘述。

我安装过程,我参照了网上不少的安装资料。不过,网上记录的错误,网上大多数都是从别处抄来一放就了事,很多估计都没有去过手安装过。我照着安装半天,都没有成功,通过不断尝试,终于安装成功,并记录下安装过程。并不断尝试,将多余不需要的部分删除掉。
闲话少扯,进入正题。

一、安装环境
1、Linux版本: CentOS 6.5
2、Hadoop版本:CDH5.10.2
3、Hive版本:Hive-1.1.0-cdh5.10.2
4、JDK版本:JDK1.8

集群环境:集群由4台主机组成,hdp71到hdp74

二、安装前准备
我们是通过自己编译TEZ,来安装TEZ前,所以需要安装maven和Protobuf

找一台CDH集群的主机,hdp71,作为安装编译主机

安装编译环境依赖的OS包:
yum -y install gcc gcc-c++ libstdc+±devel make build

安装下载工具
yum install wget

1、安装maven
Maven版本:apache-maven-3.5.4 (必须安装Maven)

进入安装目录/appinst,下载maven
cd /appinst
wget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz

maven 解压
tar zvxf apache-maven-3.5.4-bin.tar.gz
#把maven转换到指定目录
mv apache-maven-3.5.4 /usr/local/

打开全局配置文件
vi /etc/profile
添加maven全局配置参数

export MAVEN_HOME=/usr/local/apache-maven-3.5.4/
export PATH=$MAVEN_HOME/bin:$PATH 

让配置文件生效source /etc/profile

查询maven版本号
mvn --version

由于众所周知的原因,下载比较不稳定,可以配置阿里云镜像仓库提高下载依赖包的速度
如下图把参数放到响应位置

配置参数

<mirror>
   <id>alimaven</id>
   <name>aliyun maven</name>
   <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
   <mirrorOf>central</mirrorOf>
</mirror>

2、安装Protobuf2.5.0
Tez编译环境依赖的Protobuf,Protobuf2.5.0 (注意:必须为这个版本),下载地址https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz

下载Protobuf2.5.0安装包
cd /appinst
wget https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz
(1)解压安装
tar -zxvf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0/

./configure
make
make install

(2)验证是否安装成功
protoc --version

3、编译Tez0.8.5

Tez版本选择:
对于Tez版本0.8.3及更高版本需要Apache Hadoop2.6.0或更高版本。对于Tez版本为0.9.0及更高版本则需要Apache Hadoop2.7或更高版本。在CDH集群中使用的Hadoop版本为2.6.0,所以这里选择Tez的版本为0.8.5。

下载Tez源码包:(二选一)
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

cd /appinst
wget http://apache.claz.org/tez/0.8.5/apache-tez-0.8.5-src.tar.gz

(1)解压
cd /appinst
tar -zxvf apache-tez-0.8.5-src.tar.gz

(2)修改解压后tez-rel-release-0.8.5文件夹下pom.xml文件,
cd /appinst/apache-tez-0.8.5-src
修改解压后apache-tez-0.8.5-src文件夹下pom.xml文件,<hadoop.version>修改为自己Hadoop版本。
<hadoop.version>2.6.0-cdh5.10.2</hadoop.version>
vi pom.xml

   <properties>
    <maven.test.redirectTestOutputToFile>true</maven.test.redirectTestOutputToFile>
    <clover.license>${user.home}/clover.license</clover.license>
    <hadoop.version>2.6.0-cdh5.10.2</hadoop.version>
    <jetty.version>6.1.26</jetty.version>
    <pig.version>0.13.0</pig.version>
    <javac.version>1.7</javac.version>
    <slf4j.version>1.7.10</slf4j.version>
    <enforced.java.version>[${javac.version},)</enforced.java.version>
    <distMgmtSnapshotsId>apache.snapshots.https</distMgmtSnapshotsId>
    <distMgmtSnapshotsName>Apache Development Snapshot Repository</distMgmtSnapshotsName>
    <distMgmtSnapshotsUrl>https://repository.apache.org/content/repositories/snapshots</distMgmtSnapshotsUrl>
    <distMgmtStagingId>apache.staging.https</distMgmtStagingId>
    <distMgmtStagingName>Apache Release Distribution Repository</distMgmtStagingName>
    <distMgmtStagingUrl>https://repository.apache.org/service/local/staging/deploy/maven2</distMgmtStagingUrl>
    <failIfNoTests>false</failIfNoTests>
    <protobuf.version>2.5.0</protobuf.version>
    <protoc.path>${env.PROTOC_PATH}</protoc.path>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <scm.url>scm:git:https://git-wip-us.apache.org/repos/asf/tez.git</scm.url>
    <build.time>${maven.build.timestamp}</build.time>
    <frontend-maven-plugin.version>0.0.23</frontend-maven-plugin.version>
    <findbugs-maven-plugin.version>3.0.1</findbugs-maven-plugin.version>
    <javadoc-maven-plugin.version>2.9.1</javadoc-maven-plugin.version>
  </properties>

因Hadoop环境版本为CDH版本,故需要添加Cloudera的Maven仓库地址:
vi pom.xml

<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>

屏蔽pom.xml文件中tez-ext-service-tests、tez-ui、tez-ui2三个模块。

 <modules>
    <module>hadoop-shim</module>
    <module>tez-api</module>
    <module>tez-common</module>
    <module>tez-runtime-library</module>
    <module>tez-runtime-internals</module>
    <module>tez-mapreduce</module>
    <module>tez-examples</module>
    <module>tez-tests</module>
    <module>tez-dag</module>
<!--
    <module>tez-ext-service-tests</module>
    <module>tez-ui</module>
    <module>tez-ui2</module>
-->
    <module>tez-plugins</module>
    <module>tez-tools</module>
    <module>hadoop-shim-impls</module>
    <module>tez-dist</module>
    <module>docs</module>
  </modules>

<!--
      <dependency>
        <groupId>org.apache.tez</groupId>
        <artifactId>tez-ext-service-tests</artifactId>
        <version>${project.version}</version>
      </dependency>
-->

(3)修改Tez源码
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);
}

(4)编译(解压目录下)
mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true

4、安装

(1)将tez-dist/target/tez-0.8.5-minimal 目录上传到HDFS文件中

cd tez-dist/target
su - hdfs
hadoop fs -mkdir -p /tez-dir
hadoop fs -put /appinst/apache-tez-0.8.5-src/tez-dist/target/tez-0.8.5-minimal /tez-dir
hadoop fs -chmod -R 777 /tez-dir
exit

(2)增加配置属性
在cm管理控制界面中hive配置界面
hive\配置\范围\Gateway\hive-site.xml 的 Hive 客户端高级配置代码段(安全阀)中增加如下内容

<property>
    <name>tez.lib.uris</name>
    <value>${fs.defaultFS}/tez-dir/tez-0.8.5-minimal,${fs.defaultFS}/tez-dir/tez-0.8.5-minimal/lib</value>
 </property>
 <property>
     <name>tez.use.cluster.hadoop-libs</name>
     <value>true</value>
</property>
<property>
     <name>hive.tez.container.size</name>
     <value>1024</value>
<description>参数设置为Yarn容器yarn.scheduler.minimum-allocation-mb相同或1到2倍, 但不能大于yarn.scheduler.maximum-allocation-mb</description>
 </property>

在这里插入图片描述
在这里插入图片描述

hive\配置\范围\HiveServer2\hive-site.xml 的 HiveServer2 高级配置代码段(安全阀)中增加如下内容

<property>
     <name>hive.tez.container.size</name>
     <value>1024</value>
<description>参数设置为Yarn容器yarn.scheduler.minimum-allocation-mb相同或1到2倍, 但不能大于yarn.scheduler.maximum-allocation-mb</description>
 </property>

在这里插入图片描述
在这里插入图片描述

HDFS\配置\Gateway\hdfs-site.xml 的 HDFS 客户端高级配置代码段(安全阀)增加如下内容

<property>
    <name>tez.lib.uris</name>
    <value>${fs.defaultFS}/tez-dir/tez-0.8.5-minimal,${fs.defaultFS}/tez-dir/tez-0.8.5-minimal/lib</value>
 </property>
 <property>
     <name>tez.use.cluster.hadoop-libs</name>
     <value>true</value>
</property>


<property>
     <name>hive.tez.container.size</name>
     <value>1024</value>
<description>参数设置为Yarn容器yarn.scheduler.minimum-allocation-mb相同或1到2倍, 但不能大于yarn.scheduler.maximum-allocation-mb</description>
 </property>

在这里插入图片描述

在这里插入图片描述
(3) 拷贝Tez jar包至 Hive lib 中
将tez-dist/target/tez-0.8.5目录下和lib目录下的所有jar包拷贝至{HIVE_HOME}/lib目录下
CM安装的hive程序目录我这里是在/opt/cloudera/parcels/CDH-5.10.2-1.cdh5.10.2.p0.5/lib/hive/lib/

cp /appinst/apache-tez-0.8.5-src/tez-dist/target/tez-0.8.5-minimal/*.jar /opt/cloudera/parcels/CDH-5.10.2-1.cdh5.10.2.p0.5/lib/hive/lib/

scp /appinst/apache-tez-0.8.5-src/tez-dist/target/tez-0.8.5-minimal/.jar hdp72:/opt/cloudera/parcels/CDH-5.10.2-1.cdh5.10.2.p0.5/lib/hive/lib/

scp /appinst/apache-tez-0.8.5-src/tez-dist/target/tez-0.8.5-minimal/
.jar hdp74:/opt/cloudera/parcels/CDH-5.10.2-1.cdh5.10.2.p0.5/lib/hive/lib/

四、填坑日志
(1)org.apache.commons.collections4.BidiMap没有找到报错
Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections4.BidiMap
把commons-collections4-4.1.jar文件拷贝到所有hadoop的lib目录下

cp /appinst/apache-tez-0.8.5-src/tez-dist/target/tez-0.8.5-minimal/lib/commons-collections4-4.1.jar /opt/cloudera/parcels/CDH-5.10.2-1.cdh5.10.2.p0.5/lib/hadoop/lib/
scp /appinst/apache-tez-0.8.5-src/tez-dist/target/tez-0.8.5-minimal/lib/commons-collections4-4.1.jar hdp72:/opt/cloudera/parcels/CDH-5.10.2-1.cdh5.10.2.p0.5/lib/hadoop/lib/

(2)避免kryo错误
hadoop fs -put /opt/cloudera/parcels/CDH-5.10.2-1.cdh5.10.2.p0.5/jars/kryo-2.22.jar /tez-dir/tez-0.8.5-minimal

重新启动HDFS,HIVE。

五、Tez使用

在Hive中使用:
若要使用TEZ,则设置:
set hive.execution.engine=tez;
若使用Mapreduce,则设置:
set hive.execution.engine=mr;
若要使用hive on spark,则设置:
set hive.execution.engine=spark;

六、写在后面

网上很多让直接在hive-site.xml上文件编辑添加,并增加文件tez-site.xml,我照做了,总是不成功,后来才发现,我一重启后,CM就把在CM中配置的内容覆盖掉这些文件,最后我是通过界面增加。在配置成功。
针对hive.tez.container.size参数配置,通过尝试,发现HiveServer2修改后,客户端才有效。在gateway上配置了,好像只有hue有效。

通过亲手安装,对配置文件对各个组件的作用有了进一步了解,同时也了解了文件目录结构,工作目录文件的软连接关系等也有了有进一步了解。

最后,要感谢网上各位提供的CDH安装TEZ的文章,对我一步步安装起到了指导作用。还要感谢前面踩坑的人,你们记录下的坑,指引了我从坑里爬出来。

谢谢前面的探路者们。

希望这篇日志,能给后来者以参考。错误和疏漏在所难免,请各位留言指出,不胜感谢。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值