1. 程式人生 > >hadoop節點執行的reduce和map任務數

hadoop節點執行的reduce和map任務數

背景:之所以想確認這個資料,是因為在hadoop的集群系統中,發現各個節點的CPU使用率都不高,並且檢視整個叢集併發的map和reduce數,都只有6(三臺hadoop機器)

分析:為了查清楚,為什麼tasktracker都只啟動了兩個map任務和兩個reduce任務,查看了hadoop的相關配置說明。具體細節如下:
      hadoop可以配置每個TaskTracker啟動的map和reduce任務數(直白的意思是啟動多少個執行緒來同時處理任務);一般來說,
可以根據CPU的個數,配置同時執行的任務數。該配置在檔案mapred-site.xml中。如果不配置的話,默認個數為2,當CPU個數大於2時,則不能完全的利用上當前CPU的能力
      <property>
                <name>mapred.tasktracker.map.tasks.maximum</name>
                <value>8</value>
                <final>true</final>
        </property>
        <property>
                <name>mapred.tasktracker.reduce.tasks.maximum</name>
                <value>8</value>
                <final>true</final>
        </property>
       此外,在該檔案中,還有一個類似的配置選項;該配置項對應的是每個job的map數和reduce數,hadoop的預設取值分別是2和1。真正在執行的時候,每個job的map數,是由多個因素決定的,檔案中配置的,只能起到參考作用,真正執行的map數未必是該值;但是,執行時的reduce數,就是檔案中配置的取值了。reduce task官方建議配置為0.99*mapred.tasktracker.reduce.tasks.maximum,此時所有的reduce都能夠同時立即啟動。一個job的map個數過多,會給Jobtracker的任務分配帶來太大的壓力,並且任務的啟動也需要時間;至於為什麼job的reduce數要和叢集中reduce任務個數持平,這個我不太清楚,感覺即使不持平,也不會有很大的差別。

結論:依次修改節點的配置資料,並重啟該節點,調整了叢集的配置。各個節點的CPU使用率也上去了,執行時間也縮短了。