HIVE 非常长的字段提供 OOM 堆



我们在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

使用技术研发中心+ORC+8G内存时的示例日志:https://pastebin.com/uza84t6F

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

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

--最小和最大拆分大小:

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

最新更新