Java Hadoop流式内存使用

Java Hadoop流式内存使用,java,memory,hadoop,mapreduce,Java,Memory,Hadoop,Mapreduce,我想知道内存在以下作业中的使用位置: Hadoop Mapper/Reducer堆大小:-Xmx2G 流式API: 映射器:/bin/cat 减速器:wc 输入文件是一个350兆字节的文件,包含一行a 这是我们遇到的实际问题的简化版本 从HDFS读取文件并构造Text-对象的堆大小不应超过700MB-假设Text也使用每个字符16位-我不确定这一点,但我可以想象Text只使用8位 所以有这些(最坏情况)700MB线路。该行应该至少能容纳堆中的2倍,但我总是遇到内存不足的错误 这是Hado

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

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

    • 映射器:
      /bin/cat
    • 减速器:
      wc
  • 输入文件是一个350兆字节的文件,包含一行
    a

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

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

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

这是Hadoop中的一个可能的错误(例如,非保存副本),还是我不理解一些需要大量内存的步骤


如果有任何进一步的提示,我将非常感激

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

当你说-

输入文件是一个350MB的文件,其中包含一行a

我假设您的文件有一行包含所有a的单端行分隔符


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

谢谢。但我的问题是
mapred.child.java.opts
-Xmx2048M
,因此一个任务最多可以使用2GBmemory@mt_:你整个系统有多少钱?以及,为该机器的tasktracker和datanode分配了多少内存?每台机器都有16GB内存,配置为2个映射任务和1个reduce任务->任何时候都不应使用超过6GB的内存。
HADOOP\u HEAPSIZE
是5GB-因此datanode和tasktracker应该有每个5GB堆-这可能是罪魁祸首,因为值可能是5GB更重要的是,这似乎与这份失败的工作无关。在
HADOOP\u HEAPSIZE
设置为2GB、4GB或5GB的计算机上,任务失败。没什么大不了的