hadoop - 记录对于内存缓冲区来说太大。通过 TEZ 使用 Hive 的 ORC 表时出错

标签 hadoop hive orc tez

我们正在尝试从 HIVE (1.2.1) 中的“ORC”表中读取数据,并将该数据放入带有“TextInputFormat”的表中。原始数据中的某些条目太大,在运行过程中出现以下错误:

org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.tez.runtime.library.common.sort.impl.ExternalSorter$MapBufferTooSmallException: Record too large for in-memory buffer. Exceeded buffer overflow limit, 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 - 速度较慢但更有弹性。

设置 hive.execution.engine = mr ;

提示 #2:由于异常来自可怕的 TEZ ExternalSorter 野兽,请深入研究 TEZ 属性,例如 tez.runtime.sorter.class tez.runtime.io.sort.mb 等。请注意,找到一组工作属性(甚至不说调整它们以匹配您的 hive.tez.container.size)将可能需要某种巫毒祭祀。

比照。 HortonWork 的 Configuring Tez初学者手册。

关于hadoop - 记录对于内存缓冲区来说太大。通过 TEZ 使用 Hive 的 ORC 表时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35312662/

相关文章:

java - hdfs://localhost:5050/c:/filename.txt中的路径名/c:/filename.txt不是有效的DFS文件名

sql - 无法在子查询中识别 'select'附近的输入

api - 如何在 Hive 之上使用 GraphQL 创建 API?

apache-spark - 将 ORC 文件从 spark 写入 hadoop 时出错

java - 在mapreduce程序中未调用reducer

text - Hadoop...Text.toString()转换问题

sql - 如何在具有多个文件的多个目录上运行配置单元查询

hadoop - 如何在CentOS的hadoop上安装hive?

hadoop - 是否可以从命令行读取orcserde hadoop文件?

hadoop - Apache Solr 支持 ORC 文件格式