【发布时间】:2012-04-23 23:20:25
【问题描述】:
我已经搜索并没有找到太多与 Hadoop Datanode 进程因超过 GC 开销限制而死亡相关的信息,所以我想我会发布一个问题。
我们正在进行一项测试,我们需要确认我们的 Hadoop 集群可以处理存储在其上的大约 300 万个文件(目前是一个 4 节点集群)。我们使用的是 64 位 JVM,我们已经为 namenode 分配了 8g。但是,随着我的测试程序向 DFS 写入更多文件,数据节点开始因以下错误而死亡: 线程“DataNode:[/var/hadoop/data/hadoop/data]”中的异常 java.lang.OutOfMemoryError:超出 GC 开销限制
我看到了一些关于一些选项的帖子(并行 GC?)我猜可以在 hadoop-env.sh 中设置,但我不太确定语法,而且我是新手,所以我没有不太了解它是如何完成的。 感谢您的帮助!
【问题讨论】:
-
这里只是为人们提供的更新:@dfs 中的 150 万个文件,当我的 64 位 JVM 为 1g(默认)时,数据节点开始因此错误而死亡。当我将它提高到 2g 时,它消失了,直到我得到大约 300 万个文件。我想知道这种内存膨胀是否是一个已知问题,如果是,我可以尝试解决哪些其他建议?
-
就像 Tejas Patil 提到的,默认的块大小是 64MB。 Hadoop 每次运行时都会将每个文件的元数据加载到内存中。您拥有的文件越多,占用的内存就越多。如果这些文件远小于默认块大小并且您可以选择这样做,请尝试将文件组合成更大的文件以存储到 HDFS。只是一个想法:)