2011-09-26 35 views
0

我創建了Elastic MapReduce作業,並試圖優化其性能。如何告訴hadoop要分配給單個映射器工作的內存量?

在這一刻,我試圖增加每個實例的映射器數量。我通過mapred.tasktracker.map.tasks.maximum這樣= X

elastic-mapreduce --create --alive --num-instance 3 \ 
--bootstrap-action s3://elasticmapreduce/bootstrap-actions/configure-hadoop \ 
--args -s,mapred.tasktracker.map.tasks.maximum=5 

每次我嘗試過2%的小實例設置X,初始化失敗,從中我得出結論說,Hadoop的分配800米每個映射任務的內存。對我來說這似乎太過分了。我想它是400米上衣。

我該如何告訴hadoop爲每個地圖任務使用更少的內存?

+0

您可以指定每個JVM應該使用多少內存,但必須在自己的進程中運行每個任務才能執行此操作。 –

回答

3

檢查mapred.child.java.opts屬性。默認爲-Xmx200m,這意味着每個map/reduce任務需要200MB的堆。

看起來像EC2 small有1.7 GB的內存。以下是TaskTracker節點上Hadoop進程默認設置的內存。由於"Hadoop : The Definitive Guide"

Datanode的1000 MB
的TaskTracker 1000 MB
的TaskTracker孩子map任務400 MB(2 * 200 MB)
的TaskTracker孩子map任務400 MB(2 * 200 MB)

達爾2800 MB。

除此之外,還有OS內存。要麼選擇更好的配置,要麼更改默認設置。僅供參考,這裏是針對不同節點的H/W配置的recommendation

相關問題