我想知道 mapreduce.map.memory.mb 以及 mapred.map.child.java.opts 参数。是 mapreduce.map.memory.mb > mapred.map.child.java.opts ?
mapreduce.map.memory.mb
mapred.map.child.java.opts
6za6bjd01#
mapreduce.map.memory.mb是hadoop允许分配给Map器的内存上限,单位为mb。默认值为512。如果超过此限制,hadoop将以如下错误终止Map程序:container[pid=container\u 1406552545451\u 0009\u 01\u000002,containerid=container\u 234132\u 0001\u 01\u000001]运行超出物理内存限制。当前使用量:使用了512MB物理内存中的569.1MB;使用了970.1 mb的1.0 gb虚拟内存。杀人容器。hadoop mapper是一个java进程,每个java进程都有自己的堆内存最大分配设置,通过mapred.map.child.java.opts(或hadoop 2+中的mapreduce.map.java.opts)进行配置。如果Map程序进程耗尽堆内存,Map程序将抛出java内存不足异常:错误:java.lang.runtimeexception:java.lang.outofmemoryerror因此,hadoop和java设置是相关的。hadoop设置更像是一种资源强制/控制设置,而java更像是一种资源配置设置。java堆设置应该小于hadoop容器内存限制,因为我们需要为java代码保留内存。通常,建议为代码保留20%的内存。因此,如果设置正确,基于java的hadoop任务永远不会被hadoop终止,因此您永远不会看到上面的“终止容器”错误。如果遇到java内存不足错误,则必须增加这两个内存设置。
cidc1ykv2#
以下属性允许您指定要传递给运行任务的JVM的选项。这些可以与 -Xmx 以控制可用的堆。
-Xmx
Hadoop 0.x, 1.x (deprecated) Hadoop 2.x ------------------------------- -------------------------- mapred.child.java.opts mapred.map.child.java.opts mapreduce.map.java.opts mapred.reduce.child.java.opts mapreduce.reduce.java.opts
注意,对于第一个,没有直接的hadoop2等价物;源代码中的建议是使用另外两个。 mapred.child.java.opts 仍受支持(但被其他两个更具体的设置(如果存在)覆盖)。除此之外,以下选项还允许您限制任务可用的总内存(可能是虚拟内存),包括堆、堆栈和类定义:
mapred.child.java.opts
Hadoop 0.x, 1.x (deprecated) Hadoop 2.x ------------------------------- -------------------------- mapred.job.map.memory.mb mapreduce.map.memory.mb mapred.job.reduce.memory.mb mapreduce.reduce.memory.mb
我建议设置 -Xmx 到75%的 memory.mb 价值观。在集群中,作业使用的内存不得超过服务器端配置 yarn.scheduler.maximum-allocation-mb 否则他们会被杀的。要检查它们的默认值和优先级,请参见 JobConf 以及 MRJobConfig 在hadoop源代码中。故障排除请记住,mapred-site.xml可能会为这些设置提供默认值。这可能会让人困惑——例如,如果你的工作 mapred.child.java.opts 如果mapred-site.xml设置为 mapreduce.map.java.opts 或者 mapreduce.reduce.java.opts . 您需要在作业中设置这些属性,以覆盖mapred-site.xml。检查作业的配置页面(搜索“xmx”)以查看应用了哪些值以及它们来自何处。应用程序主内存在yarn集群中,您可以使用以下两个属性来控制applicationmaster可用的内存量(以保存输入拆分、任务状态等的详细信息):
memory.mb
yarn.scheduler.maximum-allocation-mb
JobConf
MRJobConfig
mapreduce.map.java.opts
mapreduce.reduce.java.opts
Hadoop 0.x, 1.x Hadoop 2.x ------------------------------- -------------------------- yarn.app.mapreduce.am.command-opts yarn.app.mapreduce.am.resource.mb
再说一次,你可以 -Xmx (在前者)到 resource.mb 价值观。其他配置还有许多其他与内存限制相关的配置,其中一些已弃用-请参阅 JobConf 班级。一个有用的例子:
resource.mb
Hadoop 0.x, 1.x (deprecated) Hadoop 2.x ------------------------------- -------------------------- mapred.job.reduce.total.mem.bytes mapreduce.reduce.memory.totalbytes
将此值设置为较低的值(10),以强制在磁盘上发生洗牌,以防您遇到错误 OutOfMemoryError 在 MapOutputCopier.shuffleInMemory .
OutOfMemoryError
MapOutputCopier.shuffleInMemory
2条答案
按热度按时间6za6bjd01#
mapreduce.map.memory.mb是hadoop允许分配给Map器的内存上限,单位为mb。默认值为512。如果超过此限制,hadoop将以如下错误终止Map程序:
container[pid=container\u 1406552545451\u 0009\u 01\u000002,containerid=container\u 234132\u 0001\u 01\u000001]运行超出物理内存限制。当前使用量:使用了512MB物理内存中的569.1MB;使用了970.1 mb的1.0 gb虚拟内存。杀人容器。
hadoop mapper是一个java进程,每个java进程都有自己的堆内存最大分配设置,通过mapred.map.child.java.opts(或hadoop 2+中的mapreduce.map.java.opts)进行配置。如果Map程序进程耗尽堆内存,Map程序将抛出java内存不足异常:
错误:java.lang.runtimeexception:java.lang.outofmemoryerror
因此,hadoop和java设置是相关的。hadoop设置更像是一种资源强制/控制设置,而java更像是一种资源配置设置。
java堆设置应该小于hadoop容器内存限制,因为我们需要为java代码保留内存。通常,建议为代码保留20%的内存。因此,如果设置正确,基于java的hadoop任务永远不会被hadoop终止,因此您永远不会看到上面的“终止容器”错误。
如果遇到java内存不足错误,则必须增加这两个内存设置。
cidc1ykv2#
以下属性允许您指定要传递给运行任务的JVM的选项。这些可以与
-Xmx
以控制可用的堆。注意,对于第一个,没有直接的hadoop2等价物;源代码中的建议是使用另外两个。
mapred.child.java.opts
仍受支持(但被其他两个更具体的设置(如果存在)覆盖)。除此之外,以下选项还允许您限制任务可用的总内存(可能是虚拟内存),包括堆、堆栈和类定义:
我建议设置
-Xmx
到75%的memory.mb
价值观。在集群中,作业使用的内存不得超过服务器端配置
yarn.scheduler.maximum-allocation-mb
否则他们会被杀的。要检查它们的默认值和优先级,请参见
JobConf
以及MRJobConfig
在hadoop源代码中。故障排除
请记住,mapred-site.xml可能会为这些设置提供默认值。这可能会让人困惑——例如,如果你的工作
mapred.child.java.opts
如果mapred-site.xml设置为mapreduce.map.java.opts
或者mapreduce.reduce.java.opts
. 您需要在作业中设置这些属性,以覆盖mapred-site.xml。检查作业的配置页面(搜索“xmx”)以查看应用了哪些值以及它们来自何处。应用程序主内存
在yarn集群中,您可以使用以下两个属性来控制applicationmaster可用的内存量(以保存输入拆分、任务状态等的详细信息):
再说一次,你可以
-Xmx
(在前者)到resource.mb
价值观。其他配置
还有许多其他与内存限制相关的配置,其中一些已弃用-请参阅
JobConf
班级。一个有用的例子:将此值设置为较低的值(10),以强制在磁盘上发生洗牌,以防您遇到错误
OutOfMemoryError
在MapOutputCopier.shuffleInMemory
.