• hive on tez 错误记录


    1、执行过程失败,报 Container killed on request. Exit code is 143   

    如下图:

    分析:造成这种原因是由于总内存不多,而容器在jvm中占比过高,修改tez-site.xml文件,添加如下配置:

    <property>
            <name>tez.container.max.java.heap.fraction</name>
            <value>0.2</value>   #调低内存占比,默认是0.8(也就是80%)
    </property>

     2、ERROR [main] exec.TaskRunner: Error in executeTask java.lang.NoSuchFieldError: DEFAULT_MR_AM_ADMIN_USER_ENV

    分析:

    • hadoop版本与tez所带的hadoop版本不一致。
    • 没有配置tez的类路径或者配置失效。

    解决:

    • 第一种情况,删除tez的lib目录下的hadoop包,然后拷贝hadoop lib下的hadoop包过去。(参考上篇hive on tez)
    • 第二种情况,在hadoop-env.sh配置环境变量 或者拷贝tez目录或者tez的lib目录下的.jar包到hive下的lib目录。
    1、hadoop-env.sh配置环境变量
    TEZ_CONF_DIR=/data1/hadoop/hadoop/etc/hadoop/ TEZ_JARS=/tez-0.9.0 export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:${TEZ_CONF_DIR}:${TEZ_JARS}/*:${TEZ_JARS}/lib/*
    或者
    2、拷贝jar文件到hive
    #cp /tez-0.9.0/*.jar /data1/hadoop/hive/lib
    #cp /tez-0.9.0/lib/*.jar /data1/hadoop/hive/lib

     3、FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.tez.TezTask

    hive设置值有三种方法:

    方法1:在hive-site.xml文件设置,如:
    <property>
       <name>hive.execution.engine</name>
       <value>tez</value>
    </property>
    方法2:在启动的时候传递值进去,如:
    #hive --hiveconf hive.execution.engine=tez
    方法3:进入到hive-cli,通过set 设置,如:
    hive> set hiveconf hive.execution.engine=tez;
    
    
    优先级:方法3>2>1
    范围:
    方法1:全局生效
    方法2、3:当前环境生效。

    现在按方法1或者方法2配置hive.execution.engine=tez,进去到hive-cli时启动调试模式:如下:

    首先。在配置文件开启tez引擎:

    其次,启动的时候,打开调试模式,看具体错误的信息:

    hive --hiveconf hive.root.logger=DEBUG,console

    输出信息如下:

    19/06/19 02:42:05 [Tez session start thread]: INFO client.TezClient: Tez system stage directory hdfs://EDPI-HBASE/tmp/hive/root/_tez_session_dir/c6ba83f1-cd59-4a53-b9b9-38aff39ff6d9/.tez/application_1560912101665_0001 doesn't exist and is created
    19/06/19 02:42:05 [Tez session start thread]: DEBUG client.TezClientUtils: AppMaster capability = <memory:1024, vCores:1>
    hive> 19/06/19 02:42:05 [Tez session start thread]: DEBUG client.TezClientUtils: Command to launch container for ApplicationMaster is : $JAVA_HOME/bin/java  -Xmx204m -Djava.io.tmpdir=$PWD/tmp -server -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -XX:+PrintGCDetails -verbose:gc -XX:+PrintGCTimeStamps -XX:+UseNUMA -XX:+UseParallelGC -Dlog4j.configuratorClass=org.apache.tez.common.TezLog4jConfigurator -Dlog4j.configuration=tez-container-log4j.properties -Dyarn.app.container.log.dir=<LOG_DIR> -Dtez.root.logger=INFO,CLA -Dsun.nio.ch.bugLevel='' org.apache.tez.dag.app.DAGAppMaster --session 1><LOG_DIR>/stdout 2><LOG_DIR>/stderr 
    19/06/19 02:42:05 [Tez session start thread]: ERROR tez.TezSessionState: Failed to start Tez session
    java.lang.NullPointerException   #报空指针错误
        at org.apache.tez.dag.api.records.DAGProtos$PlanKeyValuePair$Builder.setValue(DAGProtos.java:1587)
        at org.apache.tez.client.TezClientUtils.createFinalConfProtoForApp(TezClientUtils.java:809)
        at org.apache.tez.client.TezClientUtils.createApplicationSubmissionContext(TezClientUtils.java:578)
        at org.apache.tez.client.TezClient.start(TezClient.java:428)
        at org.apache.hadoop.hive.ql.exec.tez.TezSessionState.startSessionAndContainers(TezSessionState.java:390)
        at org.apache.hadoop.hive.ql.exec.tez.TezSessionState.access$000(TezSessionState.java:96)
        at org.apache.hadoop.hive.ql.exec.tez.TezSessionState$1.call(TezSessionState.java:327)
        at org.apache.hadoop.hive.ql.exec.tez.TezSessionState$1.call(TezSessionState.java:323)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.lang.Thread.run(Thread.java:748)

    分析:为什么会报空指针错误呢,,,经过测试,如果不在hive-site.xml配置文件配置引擎,进入到hive-cli里面以后,通过set方法设置,在执行hive语句的时候,没问题,可以正常执行(其实,通过方法3这种方式在执行hql语句的时候,在第一次执行时也会提示空指针错误,后面在执行的时候才算正常。),但是通过方法1和2设置,不能正常执行,报:

    FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.tez.TezTask

    实际上也就是空指针错误。

    通过方法1和2设置引擎的时候,在进入hive客户端时,yarn就会分配资源启动AM,而通过方法3的时候,则是进入到hive以后,在执行具体的任务时,才开始分配资源启动AM

    解决办法:

    修改yarn-site.xml文件

    找到如下的配置
    <property> <name>yarn.resourcemanager.zk-address</name> <value>master:2181,slave1:2181,slave2:2181</value> </property>
    修改成

    <property>
    <name>hadoop.zk.address</name>
    <value>master:2181,slave1:2181,slave2:2181</value>
    </property>

    分发yarn-site.xml到其他机器,重启yarn

    经过测试,修改以后,三种方法设置引擎为tez后都可以正常的在hive里面使用hql。

    造成这种原因的我感觉应该是由于yarn.resourcemanager.zk-address参数已经过时,现在在配置的时候,都采用hadoop.zk.address配置zookeeper的地址。

    所以,出错的时候,打开调试模式还是很有帮助的。

  • 相关阅读:
    Flask_之使用过程中出现的异常
    GO-学习之golang 自动下载所有依赖包
    数据库-Oracle如何将clob数据以字符串打印出来
    数据库-Oracle条件判断语句
    python框架Django汇总
    每日一模块_os及subprocess模块【执行系统命令】
    每日一模块-sftp的使用
    python并发编程-队列MQ的学习
    python高效配置-响应code枚举类设计
    git-使用大全
  • 原文地址:https://www.cnblogs.com/yjt1993/p/11049793.html
Copyright © 2020-2023  润新知