以下属性使您可以指定要传递给运行任务的JVM的选项。 这些可以与OutOfMemoryError一起使用以控制可用的堆。
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
请注意,第一个没有直接的Hadoop 2等效项。 源代码中的建议是使用其他两个。 仍支持OutOfMemoryError(但如果存在,则被其他两个更特定的设置覆盖)。
作为这些的补充,以下内容使您可以限制可用于任务的总内存(可能是虚拟的),包括堆,堆栈和类定义:
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
我建议将OutOfMemoryError设置为MapOutputCopier.shuffleInMemory值的75%。
在YARN群集中,作业使用的内存不得超过服务器端配置OutOfMemoryError,否则它们将被杀死。
要检查默认值和优先级,请参阅Hadoop源代码中的OutOfMemoryError和MapOutputCopier.shuffleInMemory。
故障排除
请记住,您的mapred-site.xml可能会为这些设置提供默认值。 这可能会令人困惑-例如 如果您的工作以编程方式设置OutOfMemoryError,则如果mapred-site.xml设置MapOutputCopier.shuffleInMemory或mapreduce.reduce.java.opts则此设置无效。您需要在工作中设置这些属性,以覆盖mapred-site.xml。 检查作业的配置页面(搜索“ xmx”),以查看应用了哪些值以及它们来自何处。
ApplicationMaster内存
在YARN群集中,您可以使用以下两个属性来控制可用于ApplicationMaster的内存量(以保存输入拆分,任务状态等详细信息):
Hadoop 0.x, 1.x Hadoop 2.x
------------------------------- --------------------------
yarn.app.mapreduce.am.command-opts
yarn.app.mapreduce.am.resource.mb
同样,您可以将2743324639182193193664(在前者中)设置为MapOutputCopier.shuffleInMemory665值的75%。
其他配置
还有许多其他与内存限制有关的配置,其中一些已弃用-请参阅OutOfMemoryError类。 一个有用的之一:
Hadoop 0.x, 1.x (deprecated) Hadoop 2.x
------------------------------- --------------------------
mapred.job.reduce.total.mem.bytes mapreduce.reduce.memory.totalbytes
如果将此值设置为较低的值(10),则在您以MapOutputCopier.shuffleInMemory击中OutOfMemoryError时会强制在磁盘上发生随机播放。