2012-03-06 45 views
0

是否可以限制在任何給定時間使用Hadoop Streaming運行作業的mappers的數量?例如,我有一個可以爲每個節點運行1個任務的28節點羣集。如果我有100個任務的工作,我想在任何時候只使用28個節點中的20個。我想限制一些作業,因爲它們可能包含許多長時間運行的任務,我有時希望運行一些更快的運行作業,並確保它們能夠立即運行,而不是等待長時間運行的作業完成。限制在Hadoop Streaming上運行的mappers的數量

我看到了this的問題和標題是現貨,但答案似乎沒有解決這個特定的問題。

謝謝!

回答

1

雖然我不知道「節點智能」容量調度,但還是爲類似的情況構建了替代調度程序:容量調度程序。

http://hadoop.apache.org/common/docs/r0.19.2/capacity_scheduler.html

你應該定義特殊的隊列可能很長的作業和隊列進行短期工作,這個調度會在乎曾經擁有一些能力,使其總是爲每個隊列的作業。

+0

謝謝!這看起來非常接近我所期待的,儘管比我希望的稍微複雜一些。我會看看它是否會做到這一點。 – fozziethebeat 2012-03-06 18:28:03

+0

你也可以檢查這一個,它有點不同,但也需要注意一個工作不會被其他工作餓死:http://hadoop.apache.org/common/docs/r0.20.2/fair_scheduler.html – 2012-03-06 19:15:40

0

如果每個映射器中的工作量都很大,則以下選項可能會有意義,因爲此策略涉及在每個映射調用中讀取多達20個計數器的開銷。

創建一組計數器並創建組名MY_TASK_MAPPERS。使密鑰等於MAPPER < 1..K>其中K是所需映射器的最大數量。然後在Mapper中遍歷計數器,直到發現其中一個爲0.將計算機的非點IP地址作爲長計數值放入計數器中 - 將該計算機有效地分配給該映射器。如果相反所有的K都已經被使用,那麼就不用做任何事情就退出映射器。