HIVE非常长的领域给OOM堆

时间:2017-07-03 08:40:11

标签: hive out-of-memory orc bigdata

我们正在存储字符串字段,其在HIVE表中的长度从小(几KB)到很长(<400MB)不等。现在,当我们将数据从一个表复制到另一个表(没有任何条件或连接)时,我们面临着OOM的问题,这与我们在生产中运行的不完全相同,但它是发生此问题的最简单的用例。所以HQL基本上只是:

INSERT INTO new_table
SELECT * FROM old_table;

容器和Java堆设置为16GB,我们尝试过不同的文件格式(RCFile,ORC),有无压缩,不同的引擎(MR,TEZ)等,但没有任何帮助,我们总是遇到OOM。

我们不确定那里到底发生了什么。我们期待Java进程只占用单个记录最大长度的内存的几倍,大约是400M,但不是整个16GB堆。

你能给我们一些我们应该尝试或关注的东西吗?

使用的版本:HDP 2.4.2

使用TEZ + ORC + 8G RAM时的示例日志:https://pastebin.com/uza84t6F

1 个答案:

答案 0 :(得分:0)

  1. 尝试使用TEXTFILE而不是ORC。编写ORC文件需要更多的内存。

  2. 尝试增加并行度,添加更多映射器。使用Tez的这些参数并尝试增加映射器的数量:

  3. - 最小和最大分割尺寸:

    set tez.grouping.min-size=16777216;
    set tez.grouping.max-size=1073741824;
    

    见这里:https://community.hortonworks.com/articles/14309/demystify-tez-tuning-step-by-step.html