hive on tez 錯誤記錄

 

一、執行過程失敗,報 Container killed on request. Exit code is 143   java

以下圖:apache

 

 

分析:形成這種緣由是因爲總內存很少,而容器在jvm中佔比太高,修改tez-site.xml文件,添加以下配置:api

<property>
        <name>tez.container.max.java.heap.fraction</name>
        <value>0.2</value>   #調低內存佔比,默認是0.8(也就是80%)
</property>

 二、ERROR [main] exec.TaskRunner: Error in executeTask java.lang.NoSuchFieldError: DEFAULT_MR_AM_ADMIN_USER_ENVsession

分析:app

  • hadoop版本與tez所帶的hadoop版本不一致。
  • 沒有配置tez的類路徑或者配置失效。

解決:jvm

  • 第一種狀況,刪除tez的lib目錄下的hadoop包,而後拷貝hadoop lib下的hadoop包過去。(參考上篇hive on tez)
  • 第二種狀況,在hadoop-env.sh配置環境變量 或者拷貝tez目錄或者tez的lib目錄下的.jar包到hive下的lib目錄。
一、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/*
或者
二、拷貝jar文件到hive
#cp /tez-0.9.0/*.jar /data1/hadoop/hive/lib
#cp /tez-0.9.0/lib/*.jar /data1/hadoop/hive/lib

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

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:全局生效 方法二、3:當前環境生效。

如今按方法1或者方法2配置hive.execution.engine=tez,進去到hive-cli時啓動調試模式:以下:ui

首先。在配置文件開啓tez引擎:spa

 

其次,啓動的時候,打開調試模式,看具體錯誤的信息:

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的地址。

因此,出錯的時候,打開調試模式仍是頗有幫助的。

相關文章
相關標籤/搜索