您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Hive中的常見問題有哪些”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Hive中的常見問題有哪些”這篇文章吧。
hive單表分區數過多執行查詢報錯(實際上分區數越多查詢越慢,應控制分區數在5000以下):
java.lang.OutOfMemoryError: Java heap space
參考:OOM occurs when query spans to a large number of partitions
原因:
hive會在執行查詢時先將元數據中的分區信息加載到內存中,包括PARTITIONS、PARTITION_KEY_VALS、PARTITION_PARAMS等表的數據,如果分區數過多,這些表中的數據量也越大,hiveserver2默認的堆內存只有256M,因此heap不足。
如果hive-site.xml配置mapred.reduce.tasks數目較多(默認為-1,即slave個數),會導致每個查詢job產生更多的map過程,同時分區數較多,加大了單個mapred加載的分區數據量。而在mapred-site.xml中的配置占用內存過低也會導致查詢執行過程中報錯,可適當調整:mapred.child.java.opts=-Xmx512m -XX:+UseConcMarkSweepGC
解決:按照其他規則分區,降低目標表分區數,修改hive-env.sh,加入配置:export HADOOP_HEAPSIZE=2048
hive0.12升級到0.13后啟動hiveserver2,beeline登入執行任何查詢均報錯:
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
修復:以下三種方法任選其一
hiveserver2啟動時加入參數:hiveserver2 --hiveconf fs.permissions.umask-mode=022
修改1.0.3源碼:org/apache/hadoop/hive/ql/exec/Utilities.java,將第3417行改為:conf.set("fs.permissions.umask-mode", "");
重新編譯后將該類替換到hive-exec-0.13.0.jar包中。
修改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后執行任何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,過濾器鏈用于進一步提高數據命中率。
修復:修改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
執行一個動態分區語句時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參數(默認為true,見 hive-default.xml.template),則動態分區時會對所有字段排序,也會影響到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執行hive客戶端或beeline報錯:
Exception in thread "main" java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
原因:YARN中的jline版本過低。
解決:將hive-lib中的jline替換到yarn-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中的常見問題有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。