[英]Record too large for in-memory buffer. Error when working with Hive's ORC tables via TEZ
我們正在嘗試從HIVE(1.2.1)中的“ ORC”表中讀取數據,並使用“ TextInputFormat”將該數據放入表中。 某些條目的原始數據太大,並且在操作過程中會發生以下錯誤:
org.apache.hadoop.hive.ql.metadata.HiveException:org.apache.tez.runtime.library.common.sort.impl.ExternalSorter $ MapBufferTooSmallException:記錄太大,無法容納內存緩沖區。 超出緩沖區溢出限制,bufferOverflowRecursion = 2,bufferList.size = 1,blockSize = 1610612736
任何想法如何解決該問題?
我們使用TEZ引擎執行查詢,並且簡單的MR引擎沒有錯誤。
查詢執行:
insert overwrite table visits_text_test_1m select * from visits where dt='2016-01-19' limit 1000000;
更新:從ORC復制到ORC存儲時出現相同的錯誤。
更新2:來自ORC的簡單“選擇”在任何引擎上都可以很好地工作。
提示1:在運行查詢之前,只需從TEZ切換到MapReduce-速度較慢但更具彈性。
set hive.execution.engine = mr ;
提示2:由於異常來自可怕的TEZ ExternalSorter野獸,因此請深入研究TEZ屬性,例如tez.runtime.sorter.class
, tez.runtime.io.sort.mb
等。請注意,請找到有效的屬性集(甚至不說要調整它們以匹配您的hive.tez.container.size
)都可能需要某種伏都hive.tez.container.size
犧牲。
參看 HortonWork的入門配置手冊。
就像samson所說,您可能想增加容器的大小,而且我發現有時候JOIN確實會導致問題,因為默認情況下,配置單元會將聯接轉換為MAPJOIN。 您可能想嘗試以下查詢中的設置,看看是否有幫助:
set hive.auto.convert.join=false;
set hive.auto.convert.join.noconditionaltask=false;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.