CDH 5.16.1 Hive 整合 Tez

1.了解Tez

什么是Tez,我们为什么要安装它,官方的Introduction是这样的

Introduction

The Apache TEZ® project is aimed at building an application framework which allows for a complex directed-acyclic-graph of tasks for processing data. It is currently built atop Apache Hadoop YARN.

(Apache Tez®项目目标是构建一个可以通过复杂DAG处理数据流程任务的应用框架,目前构建在Apache Hadoop YARN上)

The 2 main design themes for Tez are:(Tez的两个设计主题)

Empowering end users by:(通过以下方式给予终端用户更多的权利:)

Expressive dataflow definition APIs(富有表现力的数据流程定义API)

Flexible Input-Processor-Output runtime model(灵活的输入处理器输出运行时模型)

Data type agnostic(数据类型无关性,即不关注数据格式类型)

Simplifying deployment(简易部署)

Execution Performance(执行情况)

Performance gains over Map Reduce(性能优于Map Reduce)

Optimal resource management(最佳的资源管理)

Plan reconfiguration at runtime(运行时计划重新配置)

Dynamic physical data flow decisions(动态物理数据流决策)

By allowing projects like Apache Hive and Apache Pig to run a complex DAG of tasks, Tez can be used to process data, that earlier took multiple MR jobs, now in a single Tez job as shown below.(通过允许类似Apache Hive、Apache Pig这样的项目运行复杂的DAG任务,通过tez来处理数据。在这之前需要多个mr作业实现,现在在一个tez作业中就可以完成,如下所示。)

MR vs Tez

左图中运行多个MR任务,每一个MR任务会将中间结果存储在HDFS中,每个reducer的中间结果为下一个mapper提供数据处理来源。Tez的处理过程就是一个MRR的过程,启用一个任务完成处理流程,任务与任务间不需要额外访问HDFS。

以上是Tez一个大体介绍,更多详细的Tez实现原理及过程请大家访问Tez官方网址:http://tez.apache.org/ 或检索其他文章,本文重点介绍与记录Tez在CDH环境下的搭建与融合,对于Tez的详细原理不做展开描述。

2.编译安装

公司Online环境中使用的是HDP,最近由于一些项目的实验加资源紧张于是随手抓来3台台式机,自建CDH集群。

2.1 软件环境 (版本适配)

  • CM/CDH 版本:CM5.16.1 / CDH5.16.1(hadoop2.6.0)
  • Tez 0.8.5
  • JDK 1.8.0_121
  • CentOS-6.8-x86_64

2.2 编译环境

  • Maven3 及以上版本
  • JDK8及以上版本
  • Protobuf2.5.0 【必须使用此版本】

2.3 编译环境配置

2.3.1 JDK环境变量 (自行配置并验证其成功)

[root@node3 ~]# java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

2.3.2 Maven 环境变量 (自行配置并验证其成功)

[root@node3 ~]# mvn -version
Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 23:22:22+0800)
Maven home: /opt/maven3
Java version: 1.8.0_121, vendor: Oracle Corporation
Java home: /usr/java/jdk1.8.0_121/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-642.el6.x86_64", arch: "amd64", family: "unix"

2.3.3 安装编译环境依赖的OS包

[root@node3 ~]# yum -y install gcc gcc-c++ libstdc++-devel make build

安装Protobuf2.5.0

需要通过源码的方式编译安装
Protobuf2.5.0的源码包下载地址:
链接: https://pan.baidu.com/s/1L0iMTCxr9m91X5MZdP1Txw 提取码: x3sh

[root@node3 download]# tar -zxvf protobuf-2.5.0
[root@node3 download]# cd protobuf-2.5.0

编译安装

[root@node3 protobuf-2.5.0]# ./configure
[root@node3 protobuf-2.5.0]# make & make install

执行安装……
验证是否成功

[root@node3 protobuf-2.5.0]# protoc --version
libprotoc 2.5.0
[root@node3 protobuf-2.5.0]#

2.4 编译Tez 0.8.5

2.4.1 下载Tez

从Apache官网及GitHub 下载均可
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

[root@node3 download]# wget http://apache.claz.org/tez/0.8.5/apache-tez-0.8.5-src.tar.gz
--2018-12-29 16:54:41--  http://apache.claz.org/tez/0.8.5/apache-tez-0.8.5-src.tar.gz
正在解析主机 apache.claz.org... 216.245.218.171
正在连接 apache.claz.org|216.245.218.171|:80... 已连接。

解压文件

[root@node3 download]# tar -zxvf apache-tez-0.8.5-bin.tar.gz

2.4.2 Tez 文件修改

进入解压目录

[root@node3 download]# cd apache-tez-0.8.5-src

2.4.2.1 修改pom.xml 文件

在apache-tez-0.8.5-src 根目录下找到pom.xml做以下三处修改:

  • 修改<hadoop.version>为自己CDH的版本名称
  • 添加CDH Maven仓库依赖
  • 注释掉一些不需要的模块 注释掉tez-ext-service-tests(编译会报错);tez-ui、tez-ui2(不安装)

<hadoop.version> 版本名称修改


修改Hadoop版本

添加CDH Maven仓库依赖 在<repositories></repositories>中及<pluginRepositories></pluginRepositories>中

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

注释掉一些不需要的模块 在<modules></modules>中


注释module.png

2.4.2.2 修改JobContextImpl.java 文件

进入目录找到JobContextImpl.java文件

[root@node3 apache-tez-0.8.5-src]# cd tez-mapreduce/src/main/java/org/apache/tez/mapreduce/hadoop/mapreduce
[root@node3 mapreduce]# ls
JobContextImpl.java  package-info.java            TaskInputOutputContextImpl.java
MapContextImpl.java  TaskAttemptContextImpl.java  TezNullOutputCommitter.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);
  }

2.4.2.3 执行Tez编译(注意在apache-tez-0.8.5-src目录下进行)

[root@node3 apache-tez-0.8.5-src]# mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true

开始编译……
当显示BUILD SUCCESS 则编译成功,如报错按照错误网上进行下排查重新编译。

至此编译Tez环节全部结束,下面进入Tez与CDH hive的相关配置

2.4 配置Tez 0.8.5与CDH 5.16.1 Hive集成

进入apache-tez-0.8.5-src 目录找到编译后的文件

[root@node3 apache-tez-0.8.5-src]# cd tez-dist/target/

2.4.1 将tez-0.8.5.tar.gz 上传至HDFS目录

(注意:root用户可能没有权限 可以用hdfs用户操作)

[root@node3 target]# su -hdfs
[hdfs@node3 target]$ hadoop fs -mkdir -p /apps/
[hdfs@node3 target]$ hadoop fs -put tez-0.8.5.tar.gz /apps/
[hdfs@node3 target]$ hadoop fs -chmod -R 777 /apps
[hdfs@node3 target]$ hadoop fs -ls /apps
Found 1 items
-rwxrwxrwx   3 hdfs supergroup   46364342 2018-12-28 12:12 /apps/tez-0.8.5.tar.gz

2.4.2 {HIVE_HOME}/conf目录下创建tez-site.xml文件

CM安装的Hive conf目录在/etc/hive/conf 目录下,在Client、HiveServer2和HiveMetastore服务所在节点的相应目录下均创建该文件

<?xml version="1.0"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
 
    http://www.apache.org/licenses/LICENSE-2.0
 
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->
 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
 
<!-- Put site-specific property overrides in this file. -->
 
<configuration>
     <property>
         <name>tez.lib.uris</name>
         <value>${fs.defaultFS}/apps/tez-0.8.5.tar.gz</value>
      </property>
</configuration>

2.4.3 拷贝Tez jar包至 Hive lib 中

将tez-dist/target/tez-0.8.5目录下和lib目录下的所有jar包拷贝至{HIVE_HOME}/lib目录下
CM安装的hive程序目录我这里是在/app/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/lib/hive/lib/
对照你自己安装时的目录查找即可

[root@node3 tez-0.8.5]# cd /opt/download/apache-tez-0.8.5-src/tez-dist/target/tez-0.8.5
[root@node3 tez-0.8.5]# cp -r *.jar /app/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/lib/hive/lib/
[root@node3 tez-0.8.5]# cp -r lib/*.jar /app/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/lib/hive/lib/

注意:Client、HiveServer2和HiveMetastore服务所在节点均cp一份,我这里的node3是hive client 同时也是HiveMetastore 服务,我的HiveServer2 在node2上所以我需要scp进行下同步

[root@node3 tez-0.8.5]# scp -r *.jar node2.hadoop:/app/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/lib/hive/lib/
[root@node3 tez-0.8.5]# scp -r lib/*.jar node2.hadoop:/app/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/lib/hive/lib/

2.4.4 避免kryo错误

删除hive/auxlib下的hive-exec-1.1.0-cdh5.9.3-core.jar和hive-exec-core.jar 否则会有kryo错误
我这里的CDH安装目录为:/app/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/lib/hive/auxlib
将两个jar包删除或重名下即可
(Client、HiveServer2和HiveMetastore服务均需要操作)

[root@node3 auxlib]# ls
hive-exec-1.1.0-cdh5.16.1-core.jar.bak  hive-exec-core.jar.bak

重启HiveServer2和HiveMetastore服务

2.5 运行Hive

hive> set hive.execution.engine=tez;
hive> select count(1) from default.kylin_account;
Query ID = hdfs_20181229182828_b27d6636-7ff0-4de1-8667-bc47b11117e2
Total jobs = 1
Launching Job 1 out of 1


Status: Running (Executing on YARN cluster with App id application_1545810060751_0024)

--------------------------------------------------------------------------------
        VERTICES      STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED
--------------------------------------------------------------------------------
Map 1 ..........   SUCCEEDED      1          1        0        0       0       0
Reducer 2 ......   SUCCEEDED      1          1        0        0       0       0
--------------------------------------------------------------------------------
VERTICES: 02/02  [==========================>>] 100%  ELAPSED TIME: 4.50 s
--------------------------------------------------------------------------------
OK
10000
Time taken: 14.274 seconds, Fetched: 1 row(s)

通过Yarn的8080界面可以看到作业类型变为了TEZ

Yarn:8080

测试成功……

这种部署方式是非侵入式的,为集群使用保留了一定的自由度。
hive执行时可以自行切换tez或mr来运行

hive> set hive.execution.engine=tez;
或
hive> set hive.execution.engine=mr;

另外一种方式就是配置hadoop运行环境,则整体运行就会默认都使用yarn
以后有时间再进行补充

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 229,619评论 6 539
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,155评论 3 425
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 177,635评论 0 382
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,539评论 1 316
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,255评论 6 410
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,646评论 1 326
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,655评论 3 444
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,838评论 0 289
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,399评论 1 335
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,146评论 3 356
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,338评论 1 372
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,893评论 5 363
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,565评论 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,983评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,257评论 1 292
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,059评论 3 397
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,296评论 2 376

推荐阅读更多精彩内容