gpt4 book ai didi

java - Hadoop MapReduce 小文件内存不足

转载 作者:可可西里 更新时间:2023-11-01 16:49:46 26 4
gpt4 key购买 nike

我正在针对 Hadoop 上大约 300 万个小文件运行 MapReduce 作业(我知道,我知道,但我们对此无能为力 - 这是我们源系统的性质)。

我们的代码没有什么特别的 - 它使用 CombineFileInputFormat 将一堆这些文件包装在一起,然后解析文件名以将其添加到文件的内容中,并吐出一些结果。简单易行。

因此,我们在 HDFS 中有大约 300 万个 ~7kb 的文件。如果我们针对这些文件的一小部分(一个文件夹,可能有 10,000 个文件)运行我们的任务,我们不会遇到任何麻烦。如果我们针对完整的文件列表运行它,则会出现内存不足错误。

错误出现在 STDOUT 上:

#
# java.lang.OutOfMemoryError: GC overhead limit exceeded
# -XX:OnOutOfMemoryError="kill -9 %p"
# Executing /bin/sh -c "kill -9 15690"...

我假设正在发生的事情是这样的——无论 JVM 正在运行定义输入拆分的进程,它都在试图处理 300 万个文件时变得完全不堪重负,它使用了太多内存,而 YARN 是杀了它。我愿意在这个理论上得到纠正。

因此,我需要知道如何做的是为计算输入拆分的容器增加 YARN 的内存限制,而不是为映射器或缩减器增加内存限制。然后,我需要知道如何使它生效。 (我在谷歌上搜索了相当广泛的内容,但是多年来 Hadoop 的所有迭代,很难找到适用于最新版本的解决方案......)

这是 Hadoop 2.6.0,在 AWS Elastic MapReduce 4.2.0 上使用 MapReduce API、YARN 框架。

最佳答案

我会启动一个新的 EMR 集群,并向其转换一个更大的主实例,看看是否是这个问题。

--instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.4xlarge InstanceGroupType=CORE,InstanceCount=1,InstanceType=m3.xlarge

如果 master 在配置输入拆分时内存不足,您可以修改配置 EMR Configuration

关于java - Hadoop MapReduce 小文件内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33834554/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com