0

我想知道在以下工作中使用内存的位置:

  • Hadoop Mapper/Reducer 堆大小:-Xmx2G
  • 流媒体 API:

    • 映射器:/bin/cat
    • 减速器:wc
  • 输入文件是一个 350MByte 的文件,其中包含一行完整的a's。

这是我们遇到的实际问题的简化版本。

从 HDFS 读取文件并构造一个Text-Object 不应超过 700MB 堆 ​​- 假设Text每个字符也使用 16 位 - 我不确定,但我可以想象Text只使用 8 位。

所以有这些(最坏情况)700MB 线。Line 应该至少适合堆中的 2 倍,但我总是遇到内存不足的错误。

这是 Hadoop 中的一个可能的错误(例如不重复的副本)还是我只是不了解一些必需的内存密集型步骤?

将非常感谢任何进一步的提示。

4

1 回答 1

0

mapred.child.java.opts可以通过设置属性来更改分配给每个运行任务的子 JVM 的内存。默认设置为 -Xmx200m,它为每个任务提供200 MB内存。

当你说 -

输入文件是一个 350MByte 的文件,其中包含一个全是 a 的单行。

我假设你的文件有一行所有 a 和一个结束分隔符。

如果将其作为 map(key, value) 函数中的值,我认为您可能会遇到内存问题,因为您的任务只能使用 200MB 并且您在内存中有 350MB 的记录。

于 2013-07-31T18:22:25.217 回答