我们正试图从“ORC”中读取数据。 HIVE中的表格(1.2.1)并将该数据与“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;
Upd:从ORC复制到ORC存储时出现相同的错误。
更新2:简单'选择'来自ORC的任何引擎都能很好地工作。
答案 0 :(得分:0)
提示#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
)可能需要某种伏都教牺牲。
比照。 HortonWork的Configuring Tez初学者手册。
答案 1 :(得分:0)
set hive.auto.convert.join=false;
set hive.auto.convert.join.noconditionaltask=false;