Home > Archives > Hive on Tez配置

Hive on Tez配置

Published on

一般对于这种配置类的,官网都有相应的指南。但官网上的Hive on Tez指南太简略了(至少我配置的时候是这样的),再加上今天在尝试的时候着实花了一番功夫,所以有些点还是值得写出来,以免大家重复踩坑。我的安装版本分别是hive-2.1.1tez-0.8.4

(1) 关于版本

为了保证兼容性,Hive和Tez需要使用对应的版本。所以务必下载对应的版本,然后再开始配置。

(2) 关于Tez的安装

我在网上以及官网上看到的都需要下载tez项目(github)然后进行Maven打包,生成tez-version-SNAPSHOT-archive.tar.gz

但在实际操作中,我从官网上下载了对应版本的tar.gz包之后就开始使用,具体流程如下:

由于Tez是新一代的计算引擎并且是构建在YARN之上的,所以一些依赖需要被集群共享,因此它包含的一些jar包需要上传到HDFS中。

解压tez-0.8.4-tar.gz,进入share目录,将tez.tar.gz放到HDFS中:

hdfs dfs -put /user/allen/ ~/OpenSource/tez-0.8.4/share/tez.tar.gz 

(3) 关于Hive的配置

由于Hive本身是基于HDFS的,所以如果Hadoop的计算引擎替换成了Tez,那么它也可以使用,但是这种方式侵入性比较大,需要整个Hadoop集群都替换。另外一种,在Hive层面配置Tez。

首先在${HIVE_HOME}/conf/hive-site.xml中将计算引擎替换成tez,这个是全局层面的。当然也可以在进入hive console之后,配置Session层面的。

<property>
    <name>hive.execution.engine</name>
    <value>tez</value>
</property>
hive> set hive.execution.engine=tez;

然后在${HIVE_HOME}/conf/中新建tez-site.xml并配置如下属性,以让Hive使用:

# tez-site.xml
<property>
    <name>tez.lib.uris</name>
    <value>hdfs://localhost/user/allen/tez.tar.gz</value>
</property>
<property>
<property>
    <name>tez.lib.uris.classpath</name>
    <value>
        $HADOOP_CONF_DIR, 
        $HADOOP_HOME/share/hadoop/common/*, 
        $HADOOP_HOME/share/hadoop/common/lib/*, 
        $HADOOP_HOME/share/hadoop/hdfs/*, 
        $HADOOP_HOME/share/hadoop/hdfs/lib/*, 
        $HADOOP_HOME/share/hadoop/mapreduce/*, 
        $HADOOP_HOME/share/hadoop/mapreduce/lib/*, 
        $HADOOP_HOME/share/hadoop/yarn/*, 
        $HADOOP_HOME/share/hadoop/yarn/lib/*
    </value>
</property>

tez.lib.uris.classpath配置一些属性是因为Tez好像不能加载Hadoop的一些包,比较典型的是如果Hive中的查询涉及到LZO格式文件的读取,就会出现com.hadoop.compression.lzo.LzoCodec not found异常。

接下来这点是我目前还不能理解的,即使上面配置好了。还需要将解压后的tez-0.8.4中所有tez-*.jar以及tez-0.8.4/lib中的部分jar(我配置的时候是commons-collections4-4.1.jar)也放入{HIVE_HOME}/conf/lib下面。

运行hive命令,然后看到日志中出现如下信息就说明配置成功了。

INFO  [Tez session start thread]: impl.YarnClientImpl (:()) - Submitted application application_1483168665382_0018
INFO  [Tez session start thread]: client.TezClient (:()) - The url to track the Tez Session: http://192.168.31.65:8088/proxy/application_1483168665382_0018/

我在配置中遇到的问题大多集中在NoClassDefFoundError,像什么org/apache/tez/dag/api/SessionNotRunningorg.apache.tez.dag.app.DAGAppMaster,这类问题一般是Hive找不到相应的依赖,所以可以尝试在${HIVE_HOME}/conf/lib以及tez-site.xml中添加相应依赖来解决。

最重要的一点是 – 在配置的过程中,一定要时刻关注hive日志以及Hadoop Resource Manager(http://localhost:8088)中的任务日志,它们会输出很多有用的信息,可以帮助我们进行错误的排查。

Hive日志的位置在${HIVE_HOME}/conf中配置,同样如果这种开源项目你接触多了,你就会了解很多配置文件默认都是以模板(template)形式存在的,默认是hive-log4j2.properties.template,复制一份hive-log4j2.properties,配置property.hive.log.dir属性即可

property.hive.log.dir = /path/hive/log

参考

> 配置Tez计算引擎

> Hive on Tez com.hadoop.compression.lzo.LzoCodec not found

> Hive on Tez com.hadoop.compression.lzo.LzoCodec not found CDH5

> Tez安装

> Tez官网配置

声明: 本文采用 BY-NC-SA 授权。转载请注明转自: Allen写字的地方