让 beeline 使用 hive on tez



配置 hive on tez

公司的 Hadoop 集群是 CDH 5.12.0 ,它的 Hive 的版本是 1.1.0 。我用的 tez 版本是 0.9.0 。

让 hive 使用 Apache Tez 不难,参考tez官方文档编译即可。

注意的点有以下几个:

  1. Tez 依赖 protobuf ,编译的机器上要先安装这个。我用的是 protobuf-2.5.0 。
  2. Tez 需要用 maven3 来编译,版本最低也要 3.1.1 。
  3. 修改 tez 源代码目录下的全局 pom.xml ,改 hadoop.version 的值,和目标 cdh 的 hadoop version 相同。
  4. 修改 tez 源代码目录下的全局 pom.xml ,添加如下内容:

<profile>
   <id>cdh5.12.0</id>
   <activation>
      <activeByDefault>true</activeByDefault>
   </activation>
   <properties>
      <hadoop.version>2.6.0-cdh5.12.0</hadoop.version>
   </properties>

   <pluginRepositories>
     <pluginRepository>
        <id>cloudera</id>
        <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
     </pluginRepository>
     <pluginRepository>
        <id>nexus public</id>
        <url>http://central.maven.org/maven2/</url>
     </pluginRepository>
   </pluginRepositories>
   <repositories>
     <repository>
        <id>cloudera</id>
        <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
     </repository>
     <repository>
        <id>nexus public</id>
        <url>http://central.maven.org/maven2/</url>
     </repository>
   </repositories>
</profile>
  1. 修改 tez 目录下 tez-mapreduce/src/main/java/org/apache/tez/mapreduce/hadoop/mapreduce/JobContextImpl.java ,添加如下内容:

@Override
public boolean userClassesTakesPrecedence() {
    return getJobConf().getBoolean(MRJobConfig.MAPREDUCE_JOB_USER_CLASSPATH_FIRST, false);
}
  1. 在 HDFS 上直接放 tez-0.9.0.minial.tar.gz 也可以。但我是将它解压后再放到 HDFS 上。

让 beeline 也支持 hive on tez

这里主要参考了这个文档,因为我这里的集群 HDFS 的 namenode 开了 HA ,所以在 tez-site.xml 里设置 tez.lib.uris 时,变量是用的 ${fs.defaultFS} ,如果没有 HA ,应该用 ${fs.default.name}

注意在设置 HiveServer2 的环境变量时, HADOOP_CLASSPATH 是要包含 tez-site.xml 所在目录的。

设置好重启 HiveServer2 服务后,就可以在 beeline 里,通过


SET hive.execution.engine=tez;

来使用 hive on tez 了。

如果在执行查询语句时,出现了 Caused by: java.lang.ClassNotFoundException: com.esotericsoftware.kryo.Serializer 这样的错误时,可将 /opt/cloudera/parcels/CDH/jars/kryo-2.22.jar 放到 HiveServer2 节点本地及 HDFS 上的 tez 的 lib 目录下。

本文链接: https://paxinla.github.io/posts/2018/03/rang-beeline-shi-yong-hive-on-tez.html

知识共享许可协议 本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行许可,欢迎转载、演绎,
但是必须保留本文的署名 Charles(包含链接),且不得用于商业目的。