AWS EMR-Java运行时内存不足



我正在AWS EMR上运行MapReduce作业。除了一个非常大的文件外,映射作业已完成。我得到以下错误:

OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000611280000, 1521483776, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 1521483776 bytes for committing reserved memory.

这似乎是记忆问题。我修改了我的配置json文件,添加了(比所需的多得多)内存:

[
  {
    "Classification": "hadoop-env",
    "Properties": {},
    "Configurations": [
      {
        "Classification": "export",
        "Properties": {
           "HADOOP_DATANODE_HEAPSIZE": "10240",
           "HADOOP_NAMENODE_OPTS": "-XX:GCTimeRatio=19",
           "HADOOP_HEAPSIZE": "11264",
           "HADOOP_CLIENT_OPTS": "-Xmx10240M"
       }
      }
    ]
  },
  {
    "Classification": "mapred-site",
    "Properties": {
      "mapreduce.map.memory.mb": "24576",
      "mapreduce.map.java.opts": "-Xmx19200M",
      "mapred.child.java.opts": "-Xmx4096M",
      "mapreduce.reduce.memory.mb": "15360",
      "mapreduce.reduce.java.opts": "-Xmx10240M",
      "mapreduce.job.jvm.numtasks": "1",
      "mapreduce.job.reuse.jvm.num.tasks": "1"
    }
  },
  {
    "Classification": "yarn-site",
    "Properties": {
      "yarn.scheduler.maximum-allocation-mb": "25600",
      "yarn.nodemanager.resource.memory-mb": "25600"
    }
  },
  {
    "Classification": "hive-env",
    "Properties": {}
  },
  {
    "Classification": "hive-site",
    "Properties": {}
  }
]

然而,我一直在了解这个问题。正如你所看到的,我已经添加了许多在线建议的mapred.child.java.opts,但我运气不好。我还能尝试什么?

非常感谢。

您的配置似乎超出了服务器的物理内存界限。m3.xl在物理上只有15G,默认情况下分配给容器的安全内存量为11.5G(http://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-hadoop-task-config.html)。

因此,对于m3.xl,您可以将mapreduce.map.java.opts设置为-Xmx9216,mapreduce.map.memory.mb为11520(opts应始终小于总映射内存,通常约为80%)。这些属性会影响映射任务内存大小。如果映射任务需要更多内存来处理较大的文件,则需要使用较大的实例类型。

我建议不要进行其他内存属性更改,除非这些进程特别需要这样的调优。

相关内容

  • 没有找到相关文章

最新更新