溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hive中的常見問題有哪些

發(fā)布時間:2021-12-10 10:50:29 來源:億速云 閱讀:209 作者:小新 欄目:云計算

這篇文章主要為大家展示了“Hive中的常見問題有哪些”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Hive中的常見問題有哪些”這篇文章吧。

  • hive單表分區(qū)數(shù)過多執(zhí)行查詢報錯(實際上分區(qū)數(shù)越多查詢越慢,應控制分區(qū)數(shù)在5000以下):

java.lang.OutOfMemoryError: Java heap space

參考:OOM occurs when query spans to a large number of partitions

原因:

  1. hive會在執(zhí)行查詢時先將元數(shù)據(jù)中的分區(qū)信息加載到內(nèi)存中,包括PARTITIONS、PARTITION_KEY_VALS、PARTITION_PARAMS等表的數(shù)據(jù),如果分區(qū)數(shù)過多,這些表中的數(shù)據(jù)量也越大,hiveserver2默認的堆內(nèi)存只有256M,因此heap不足。

  2. 如果hive-site.xml配置mapred.reduce.tasks數(shù)目較多(默認為-1,即slave個數(shù)),會導致每個查詢job產(chǎn)生更多的map過程,同時分區(qū)數(shù)較多,加大了單個mapred加載的分區(qū)數(shù)據(jù)量。而在mapred-site.xml中的配置占用內(nèi)存過低也會導致查詢執(zhí)行過程中報錯,可適當調(diào)整:mapred.child.java.opts=-Xmx512m -XX:+UseConcMarkSweepGC

解決:按照其他規(guī)則分區(qū),降低目標表分區(qū)數(shù),修改hive-env.sh,加入配置:export HADOOP_HEAPSIZE=2048


 

  • hive0.12升級到0.13后啟動hiveserver2,beeline登入執(zhí)行任何查詢均報錯

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.conf.Configuration.unset(Ljava/lang/String;)V

原因:hadoop1.0.3中沒有Configuration.unset(String)這個方法,對比API可知:Configuration2.2.0、Configuration1.0.4。

參考:NoSuchMethodError exception when using HIVE 0.13 with Hadoop 1.0.4

修復:以下三種方法任選其一

  1. hiveserver2啟動時加入?yún)?shù):hiveserver2 --hiveconf fs.permissions.umask-mode=022

  2. 修改1.0.3源碼:org/apache/hadoop/hive/ql/exec/Utilities.java,將第3417行改為:conf.set("fs.permissions.umask-mode", "");

    重新編譯后將該類替換到hive-exec-0.13.0.jar包中。

  3. 修改hive-site.xml,加入以下配置:

    <property>
        <name>fs.permissions.umask-mode</name>
        <value>022</value>
        <description> Setting a value for fs.permissions.umask-mode to work around issue in HIVE-6962.
     It has no impact in hadoop 1.x line on hdfs operations.
        </description>
    </property>



  • hive0.13.1升級到0.14后執(zhí)行任何SQL均報錯

NoSuchMethodError: org.apache.hadoop.mapred.JobConf.unset(Ljava/lang/String;)V

原因:同上,不兼容低版本的hadoop,JobConf繼承了Configuration,因此沒有unset方法。

參考:https://cwiki.apache.org/confluence/display/Hive/FilterPushdownDev

解釋:Filter Pushdown,過濾器鏈用于進一步提高數(shù)據(jù)命中率。

修復:修改org/apache/hadoop/hive/ql/io/HiveInputFormat.java第429行pushFilters方法,

將前兩行使用unset的代碼注釋后編譯重新打包即可:

javac -cp .:/hive/lib/*:/hadoop/lib/*:/hadoop/* HiveInputFormat.java
mkdir -p org/apache/hadoop/hive/ql/io/
mv HiveInputFormat*.class org/apache/hadoop/hive/ql/io/
jar uf /hive/lib/hive-exec-1.1.0.jar org/apache/hadoop/hive/ql/io/HiveInputFormat*.class

修改版下載地址:hive-exec-0.14.0.jar


  • 執(zhí)行一個動態(tài)分區(qū)語句時HQL報錯

org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error: Unable to deserialize reduce input key from x1x128x0x0x19x1x255 with properties {columns=reducesinkkey0,reducesinkkey1,reducesinkkey2,reducesinkkey3, serialization.lib=org.apache.hadoop.hive.serde2.binarysortable.BinarySortableSerDe, serialization.sort.order=++++++, columns.types=int,int,int,int,string,bigint}

原因:hive0.13.1 bug,如果設置了 hive.optimize.sort.dynamic.partition參數(shù)(默認為true,見 hive-default.xml.template),則動態(tài)分區(qū)時會對所有字段排序,也會影響到group by中的字段。

參考:Dynamic sort optimization propagates additional columns even in the absence of order by

修復:hive0.13.1升級到0.14即可。


  • Hive 存儲過程(暫不支持)

參考:https://issues.apache.org/jira/browse/HIVE-3087

解釋:這個估計以后也不會有,因為完全可以用shell替代。


  • Hive1.2與Hadoop2.6執(zhí)行hive客戶端或beeline報錯:

Exception in thread "main" java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected

原因:YARN中的jline版本過低。

解決:將hive-lib中的jline替換到y(tǒng)arn-lib目錄中:

cp $HIVE_HOME/lib/jline-2.12.jar $HADOOP_HOME/share/hadoop/yarn/lib/
rm -f $HADOOP_HOME/share/hadoop/yarn/lib/jline-0.9.94.jar

以上是“Hive中的常見問題有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI