hive配置tez引擎(排除所有情况bug)

hive配置tez引擎(最管用直插)

  • 多次入坑最终总结出了经验

  • tez相比MapReduce而言少了中间阶段向hdfs持久化的过程,多作业转化为单作业,只需要一次hdfs,提升计算性能。

在这里插入图片描述

集群

  • 我的集群比较复杂,基本所有情况都涵盖了,所以大家放心大胆来吧。
  • 罗列一些相关的服务供参考
组件 服务 master slave1 slave2 slave3 slave4
hdfs namenode
zookeeper QuorumPeerMain
HIVE RunJar:hive开启监听服务 客户端 服务
mysql

刚开始情况比较复杂,还想了很多,针对我的情况最终结论就是,只要节点是hadoop集群的一个节点,那么就在这个节点配置你的hive就行,也就是任意,因为你不可能不存在集群中的。

  • hive1.2.1
  • tez0.9.1

开始吧↓↓↓

  1. 解压缩apache-tez-0.9.1-bin.tar.gz

    $ tar -zxvf apache-tez-0.9.1-bin.tar.gz

  2. 修改名称

    $ mv apache-tez-0.9.1-bin/ tez-0.9.1

  3. 进入到Hive的配置目录:/opt/apps/hive/conf
    $ vi hive-env.sh

    添加以下内容

    export TEZ_HOME=/opt/apps/tez-0.9.1    #是你的tez的解压目录
    export TEZ_JARS=""
    for jar in `ls $TEZ_HOME |grep jar`; do
        export TEZ_JARS=$TEZ_JARS:$TEZ_HOME/$jar
    done
    for jar in `ls $TEZ_HOME/lib`; do
        export TEZ_JARS=$TEZ_JARS:$TEZ_HOME/lib/$jar
    done
    
    export HIVE_AUX_JARS_PATH=/opt/apps/hadoop-2.7.2/share/hadoop/common/hadoop-lzo-0.4.20.jar$TEZ_JARS
    

    目的是将tez下的所有jar包引到你的hive的lib下,启动hive需要加载

  4. 在hive-site.xml文件中添加如下配置,更改hive计算引擎

    <property>
        <name>hive.execution.engine</name>
        <value>tez</value>
    </property>
    
  5. 在Hive的/opt/apps/hive/conf下面创建一个tez-site.xml文件

    添加如下内容

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    <property>
       <name>tez.lib.uris</name>    <value>${fs.defaultFS}/tez/tez-0.9.1,${fs.defaultFS}/tez/tez-0.9.1/lib</value>
    </property>
    <property>
      <name>tez.lib.uris.classpath</name>      <value>${fs.defaultFS}/tez/tez-0.9.1,${fs.defaultFS}/tez/tez-0.9.1/lib</value>
    </property>
    <property>
         <name>tez.use.cluster.hadoop-libs</name>
         <value>true</value>
    </property>
    <property>
         <name>tez.history.logging.service.class</name>        <value>org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingService</value>
    </property>
    </configuration>
    

    相当于你的tez引擎直接在集群共享

  6. 上传Tez到集群

    将/opt/apps/tez-0.9.1上传到HDFS的/tez路径

    $ hadoop fs -mkdir /tez

    $ hadoop fs -put /opt/module/tez-0.9.1/ /tez

    $ hadoop fs -ls /tez

    /tez/tez-0.9.1

测试

  • 激动人心的测试环节

    1. 启动Hive

      $ bin/hive

    2. 建表等等…复杂操作出箭头,完美

在这里插入图片描述

  1. 集群复杂,就这么行云流水?

BUG:

  • 上面就可以成功,那么因为我们是模拟集群,资源不同,环境不同,会有以下问题

    1. 丢包,缺包

在这里插入图片描述

 Exception in thread "main" java.lang.RuntimeException: org.apache.tez.dag.api.SessionNotRunning: TezSession has already shutdown

 - **原因**:环境变量问题导致前面配置的脚本失效
 - **解决**:将tez根目录的所有jar包和tez/lib下的所有jar包拷贝到hive的/lib下---解决
  1. 资源不够

在这里插入图片描述

 - **原因**:运行Tez时检查到用过多内存而被NodeManager杀死进程问题:

   这种问题是从机上运行的Container试图使用过多的内存,而被NodeManager kill掉了。

 - **解决**:**解决方法:**

   方案一:或者是关掉虚拟内存检查。我们选这个,修改yarn-site.xml(集群所有)

   ```
   <property>
   	<name>yarn.nodemanager.vmem-check-enabled</name>
   	<value>false</value>
   </property>
   ```
  1. 最后

在这里插入图片描述
还是成功滴

更多hive及其数据仓库学习,尽在博客之中

发布了10 篇原创文章 · 获赞 4 · 访问量 1934

猜你喜欢

转载自blog.csdn.net/Kevin__Durant/article/details/101944176
今日推荐