2013-02-27 22 views
2

是否可以配置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時還有其他東西需要注意嗎?

回答

0
+0

是。問題是'ulimit'只能解決虛擬內存問題,因此很難設置好的限制,並且流式任務不會超出Java作業的限制。我需要一些強大的解決方案,因爲羣集將被衆多的學生和員工使用,並且應該沒有任何問題地工作。 – 2013-03-04 18:07:19

0

如果是,你有很多學生和工作人員訪問作業提交的Hadoop集羣,你可以看看作業調度在Hadoop中。

下面是一些類型的要點你可能感興趣的 -

公平調度器:以使得平均隨着時間的推移,每個作業 公平份額調度背後的核心思想是將資源分配給工作獲得可用資源的平等份額。 爲確保公平,每個用戶都被分配到一個池中。這樣,如果一個用戶提交了很多作業,他或她可以獲得與所有其他用戶相同份額的羣集資源(獨立於他們提交的工作)。

容量調度程序: 在容量調度,代替池,幾個隊列的創建,每個地圖的可配置數量和減少時隙。每個隊列也被分配一個保證容量(其中,羣集的總容量是每個隊列容量的總和)。容量調度是爲大型集羣定義的,可能有多個獨立的客戶和目標應用程序。

下面是我無恥複製上述內容的鏈接,由於時間不夠。 http://www.ibm.com/developerworks/library/os-hadoop-scheduling/index.html

要配置Hadoop的使用此鏈接:http://hadoop.apache.org/docs/r1.1.1/fair_scheduler.html#Installation