回覆列表
  • 1 # 使用者5443769950533

    本帖最後由 pig2 於 2014-2-20 00:20 編輯

    1.map和reduce的數量過多會導致什麼情況?

    2.Reduce可以透過什麼設定來增加任務個數?

    3.一個task的map數量由誰來決定?

    4.一個task的reduce數量由誰來決定?

    一般情況下,在輸入源是檔案的時候,一個task的map數量由splitSize來決定的,那麼splitSize是由以下幾個來決定的

    goalSize = totalSize / mapred.map.tasks

    inSize = max {mapred.min.split.size, minSplitSize}

    splitSize = max (minSize, min(goalSize, dfs.block.size))

    一個task的reduce數量,由partition決定。

    在輸入源是資料庫的情況下,比如mysql,對於map的數量需要使用者自己指定,比如

    jobconf.set(“mapred.map.tasks.nums”,20);

    如果資料來源是HBase的話,map的數量就是該表對應的region數量。

    map和reduce是hadoop的核心功能,hadoop正是透過多個map和reduce的並行執行來實現任務的分散式平行計算,從這個觀點來看,如果將map和reduce的數量設定為1,那麼使用者的任務就沒有並行執行,但是map和reduce的數量也不能過多,數量過多雖然可以提高任務並行度,但是太多的map和reduce也會導致整個hadoop框架因為過度的系統資源開銷而使任務失敗。所以使用者在提交map/reduce作業時應該在一個合理的範圍內,這樣既可以增強系統負載勻衡,也可以降低任務失敗的開銷。

  • 中秋節和大豐收的關聯?
  • 孩子咳嗽,有痰鳴音?