是否可以配置cgroups
或Hadoop,使TaskTracker產生的每個進程都分配給特定的cgroup?Hadoop:將cgroup用於TaskTracker任務
我想強制使用cgroups
的內存限制。有可能爲TaskTracker分配一個cgroup,但是如果工作遭受嚴重破壞,TaskTracker可能也會被oom-killer
殺死,因爲它們在同一個組中。
比方說,我在一臺機器上有8GB內存。我想爲DataNode和系統實用程序保留1,5GB,並讓Hadoop TaskTracker使用6,5GB的內存。現在我開始使用流API生成4個映射器和2個reducer(理論上每個都可以使用1GB RAM),這些內存消耗的內存比允許的要多。現在內存限制將會受到打擊,殺手級殺手開始殺死一份工作。我寧願爲每個Map和Reduce任務使用一個cgroup,例如限於1GB內存的cgroup
。
這是一個真正的還是更理論上的問題? oom-killer
真的會殺死Hadoop TaskTracker嗎?或者他會先開始殺死分叉進程?如果後者在大多數情況下是真的,我的想法可能會奏效。如果沒有 - 一個糟糕的工作仍然會殺死所有集羣機器上的TaskTracker,並且需要手動重啓。
使用cgroups時還有其他東西需要注意嗎?
是。問題是'ulimit'只能解決虛擬內存問題,因此很難設置好的限制,並且流式任務不會超出Java作業的限制。我需要一些強大的解決方案,因爲羣集將被衆多的學生和員工使用,並且應該沒有任何問題地工作。 – 2013-03-04 18:07:19