apachehadoop中“mapreduce.map.memory.mb”和“mapred.map.child.java.opts”之间的关系是什么?

slwdgvem  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(682)

我想知道 mapreduce.map.memory.mb 以及 mapred.map.child.java.opts 参数。
mapreduce.map.memory.mb > mapred.map.child.java.opts ?

6za6bjd0

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内存不足错误,则必须增加这两个内存设置。

cidc1ykv

cidc1ykv2#

以下属性允许您指定要传递给运行任务的JVM的选项。这些可以与 -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 仍受支持(但被其他两个更具体的设置(如果存在)覆盖)。
除此之外,以下选项还允许您限制任务可用的总内存(可能是虚拟内存),包括堆、堆栈和类定义:

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可用的内存量(以保存输入拆分、任务状态等的详细信息):

Hadoop 0.x, 1.x                    Hadoop 2.x
-------------------------------    --------------------------
                                   yarn.app.mapreduce.am.command-opts
                                   yarn.app.mapreduce.am.resource.mb

再说一次,你可以 -Xmx (在前者)到 resource.mb 价值观。
其他配置
还有许多其他与内存限制相关的配置,其中一些已弃用-请参阅 JobConf 班级。一个有用的例子:

Hadoop 0.x, 1.x (deprecated)       Hadoop 2.x
-------------------------------    --------------------------
mapred.job.reduce.total.mem.bytes  mapreduce.reduce.memory.totalbytes

将此值设置为较低的值(10),以强制在磁盘上发生洗牌,以防您遇到错误 OutOfMemoryErrorMapOutputCopier.shuffleInMemory .

相关问题