使用-Xmx 设置mapred.job.map.memory.mb和mapred.child.java.opts来控制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帖子中使用虚拟内存中几倍的最大堆大小.