2016-02-10 12 views
1

我們正在嘗試從HIVE(1.2.1)的'ORC'表中讀取數據,並使用'TextInputFormat'將該數據放入表中。有些項目是在原有的數據過大,操作過程中出現以下錯誤:記錄內存緩衝區記錄過大。通過TEZ處理Hive的ORC表時出錯

org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.tez.runtime.library.common.sort。 impl.ExternalSorter $ MapBufferTooSmallException: 記錄內存緩衝區的記錄太大。超出緩衝區溢出極限, bufferOverflowRecursion = 2,bufferList.size = 1,塊大小= 1610612736

任何想法如何解決這個問題?

我們使用TEZ引擎執行查詢,並且使用簡單的MR引擎沒有錯誤。從複製到ORC ORC存儲時同樣的錯誤:

查詢執行:

insert overwrite table visits_text_test_1m select * from visits where dt='2016-01-19' limit 1000000; 

UPD。

更新2:從ORC簡單的'選擇'工作相當不錯,任何引擎。

+0

看起來像一個TEZ錯誤 - 使標題和標籤明確。 –

+0

Thx請注意,參孫! – Samriang

回答

0

提示#1:在運行查詢之前只需從TEZ切換到MapReduce - 速度更慢但更具彈性。

set hive.execution.engine = mr ;

提示#2:因爲異常出來的可怕TEZ ExternalSorter獸,挖成TEZ屬性,如tez.runtime.sorter.classtez.runtime.io.sort.mb等被警告說,找到一個工作設置的屬性(甚至沒有說調整它們以匹配你的hive.tez.container.size)可能需要某種伏都教的犧牲。

參考HortonWork的Configuring Tez初學者手冊。

+0

1. yup,我已經嘗試MR查詢,它運作良好。 2.去閱讀更多的手冊:)但我想知道 - 是否有可能使用TEZ在HDFS內進行這樣的數據操作? – Samriang

+0

*「在HDFS中」是什麼意思*?這些道具在'tez-site.xml'中設置,它是Hive CLI(或HiveServer2)的CLASSPATH中預期的本地文件。 –

+0

請注意,'hive.tez。*'道具可以在帶有'set'命令的HQL腳本中被動態覆蓋;但不是'tez。*'道具*必須*在tez-site.xml中定義「 –

0

像samson說你可能想增加容器的大小,並且我發現有時JOIN確實導致了問題,因爲默認情況下,配置單元將連接轉換爲MAPJOIN。您可能想嘗試下面的查詢設置,看看它是否有幫助:

set hive.auto.convert.join=false; 
set hive.auto.convert.join.noconditionaltask=false; 
+0

thx爲主意!這個設置不能很好地解決我的問題,但建議增加Samson的排序緩衝區實際上有助於:) – Samriang