簡體   English   中英

記錄太大,無法容納內存緩沖區。 通過TEZ處理Hive的ORC表時出錯

[英]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.classtez.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM