2012-11-06 61 views
2

假設我有一個在11節點集羣上運行的EMR作業:m1.small主節點,而10個m1.xlarge從節點。如何確定並行mapers/reducers以及堆內存的數量?

現在一個m1.xlarge節點具有15 GB的RAM。

如何確定可以設置的並行映射器和reducer的數量?

我的工作是內存密集型,我想有越來越多的堆分配給JVM。

另一個相關的問題: 如果我們設置以下參數:

<property><name>mapred.child.java.opts</name><value>-Xmx4096m</value></property> 
<property><name>mapred.job.reuse.jvm.num.tasks</name><value>1</value></property> 
<property><name>mapred.tasktracker.map.tasks.maximum</name><value>2</value></property> 
<property><name>mapred.tasktracker.reduce.tasks.maximum</name><value>2</value></property> 

那麼這將會4GB被4個進程(2映射器和2減速)共享或他們都將獲得4GB每個?

回答

2

他們將得到4GB。

你應該檢查你的堆設置是爲任務跟蹤器和數據節點設置的,然後你就會知道你剩下多少內存分配給了子項(實際的mapper/reducers)。

然後它只是一個平衡的行爲。如果你需要更多的內存,你會需要更少的映射器/縮減器,反之亦然。

還要記住你的CPU有多少個內核,你不需要在一個內核上執行100個map任務。爲了調整,最好隨着時間的推移監視堆使用率和CPU利用率,這樣你就可以擺弄旋鈕。

+0

好吧,對於m1.xlarge,我們有15 GB的內存,但是我說有2個映射器和2個reducer,那麼它總共將達到16 GB,這樣做並且讓它處於邊緣是不是主意? – Amar

+0

嘗試一下,看看:-)如果你得到OOME,那麼你將不得不降低堆空間。此時它是試錯。對羣集設置進行刻錄測試的一個好方法是使用contrib tera-sort mapreduce作業,這樣您就可以對運行時進行基準測試。考慮到你有多少ram,你可能也想更新io.sort.mb到更高的值。 –

相關問題