【发布时间】:2011-11-06 14:49:25
【问题描述】:
使用 -Xmx 设置 mapred.job.map.memory.mb 和 mapred.child.java.opts 以控制 Mapper 和 Reduce 任务使用的最大内存有什么区别?哪个优先?
【问题讨论】:
标签: memory hadoop mapreduce task
使用 -Xmx 设置 mapred.job.map.memory.mb 和 mapred.child.java.opts 以控制 Mapper 和 Reduce 任务使用的最大内存有什么区别?哪个优先?
【问题讨论】:
标签: memory hadoop mapreduce task
-Xmx指定已分配jvm的最大堆空间。这是为对象分配保留的空间,由garbage collector 管理。另一方面,mapred.job.map.memory.mb 指定 Hadoop 任务子进程允许的最大 virtual memory。如果超过最大堆大小,JVM 会抛出 OutOfMemoryException。
JVM 可能使用比最大堆大小更多的内存,因为它还需要空间来存储对象定义(permgen 空间)和堆栈。如果进程使用的虚拟内存比mapred.job.map.memory.mb 多,则会被hadoop 杀死。
所以一个不会优先于另一个(它们测量内存使用的不同方面),但-Xmx 是 JVM 的参数,mapred.job.map.memory.mb 是任务虚拟内存的硬上限尝试可以使用,由 hadoop 强制执行。
希望这有帮助,记忆很复杂!我目前对为什么我的 JVM 进程在my SO post 中使用虚拟内存中最大堆大小的几倍感到困惑。
【讨论】: