2011-11-06 68 views

回答

14

-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的虛擬內存中使用最大堆大小的幾倍。

+0

嗨。這會如何影響非java自定義映射器/縮減器任務?有沒有辦法限制自定義映射器/ reducer腳本的內存分配? –