为TaskTracker子进程配置内存的不同方式(Mapper和Reduce Tasks)



设置mapred.job.map.memory.mb和mapred.child.java.opts使用-Xmx来控制Mapper和Reduce任务使用的最大内存有什么区别?哪个优先?

-Xmx指定分配的jvm的最大堆空间。这是为对象分配保留的空间,由垃圾收集器管理。另一方面,mapred.job.map.memory.mb指定Hadoop任务子进程允许的最大虚拟内存。如果超过最大堆大小,JVM抛出OutOfMemoryException。

JVM可能使用比最大堆大小更多的内存,因为它还需要空间来存储对象定义(permgen空间)和堆栈。如果进程占用的虚拟内存超过mapred.job.map.memory.mb, hadoop将终止该进程。

所以一个不优先于另一个(它们测量内存使用的不同方面),但是-Xmx是JVM的一个参数,mapred.job.map.memory.mb是一个任务尝试可以使用的虚拟内存的硬上限,由hadoop强制执行。

希望这是有帮助的,记忆是复杂的!我现在很困惑,为什么我的JVM进程在我的SO帖子中使用了虚拟内存中最大堆大小的几个倍。

最新更新