apache - Apache Hadoop YARN 中的 'mapreduce.map.memory.mb' 和 'mapred.map.child.java.opts' 是什么关系?

标签 apache hadoop configuration hadoop-yarn heap-size

我想知道 mapreduce.map.memory.mbmapred.map.child.java.opts 参数之间的关系。

mapreduce.map.memory.mb > mapred.map.child.java.opts?

最佳答案

ma​​preduce.map.memory.mb 是 Hadoop 允许分配给映射器的内存上限,以兆字节为单位。默认值为 512。 如果超过此限制,Hadoop 将终止映射器并显示如下错误:

Container[pid=container_1406552545451_0009_01_000002,containerID=container_234132_0001_01_000001] is running beyond physical memory limits. Current usage: 569.1 MB of 512 MB physical memory used; 970.1 MB of 1.0 GB virtual memory used. Killing container.

Hadoop 映射器是一个 java 进程,每个 Java 进程都有自己的堆内存最大分配设置,通过 ma​​pred.map.child.java.opts(或 Hadoop 中的 mapreduce.map.java.opts 2+). 如果 mapper 进程用完堆内存,mapper 会抛出 java 内存不足异常:

Error: java.lang.RuntimeException: java.lang.OutOfMemoryError

因此,Hadoop 和Java 设置是相关的。 Hadoop 设置更像是一种资源实现/控制,而 Java 更多是一种资源配置。

Java 堆设置应该小于 Hadoop 容器内存限制,因为我们需要为 Java 代码预留内存。通常,建议为代码预留 20% 的内存。因此,如果设置正确,基于 Java 的 Hadoop 任务永远不会被 Hadoop 杀死,因此您永远不会看到像上面那样的“Killing container”错误。

如果您遇到 Java 内存不足错误,则必须增加这两个内存设置。

关于apache - Apache Hadoop YARN 中的 'mapreduce.map.memory.mb' 和 'mapred.map.child.java.opts' 是什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24070557/

相关文章:

php - 如何更改magento电子商务的主题?

c# - 每当我打开 VS 2010 解决方案时,如何禁用正在 check out 的 .vspscc 文件?

python - Apache mod_wsgi : PermissionError when trying to access a page

apache - 将 CGI 参数传递给 Windows 上 Apache 中的可执行文件

scala - 如何使用正则表达式Scala Spark验证地址

xcode - 如何更改 Xcode 中事件方案的名称?

apache - 我是否必须复制端口 80 和 443 的虚拟主机指令?

apache - Apache 反向代理背后的自签名证书有问题吗?

eclipse - 如何使用Eclipse从Windows运行Map Reduce程序

java - 在本地模式下运行一个简单的级联应用程序