(1)combiner優化
在之前的shuffle過程中的map端生成最終溢寫檔案時,例如:aaa 1, aaa 1 這樣的資料會被合併為 ,而我們可以通過給每個map顯示的設定combiner,來將這個節點的輸出優化,即如前面的例如,如果他們是同一節點的資料,他們會合併為,combiner相當於小型的reduce,不過他們這要求reduce的輸入資料格式和輸出資料格式一致,並且value的值是滿足結合律的
(2)壓縮
通過在對資料壓縮,來減少網路io,減少磁碟占用,可以用在三個地方:輸入資料壓縮、map輸出壓縮、reduce輸出壓縮。當然壓縮也會增加cpu計算
(3)map的數量
map task的數量使用split的數量決定的,split的資料越少,每個map task的執行時間就越短,但是相應的job的執行時間也會被拉長,因為內部排程的時間更長了。
(4)reduce的數量
可以在client設定,增加reduce的數量
(5)大量小檔案的優化
mapreduce不怕大檔案,就怕小檔案,預設情況下,textinputformat對任務的切片機制是按照檔案規劃切片,不管有多少個小檔案,都會是單獨的切片,都會交給乙個maptask,這樣,如果有大量的小檔案,就會產生大量的maptask,處理效率極端底下
最好的方法:在資料處理的最前端(預處理、採集),就將小檔案合併成大檔案,
在上傳到hdfs做後續的分析,如果已經是大量的小檔案在hdfs中了,可以使用另一種inputformat來做切片(combinefileinputformat),它的切片邏輯跟fileinputformat不同:它可以將多個小檔案從邏輯上規劃到乙個切片中,這樣,多個小檔案就可以交給乙個maptask了
MapReduce的優化方法
從以下6個方面著手考慮 map端資料輸入時主要需要考慮的是小檔案 因為hadoop預設的切片原則是按檔案進行的 的問題 針對小檔案的問題我們有如下兩種解決方案 1 合併小檔案 在map讀取資料任務開始前,可以人工的對小檔案進行乙個合併,合併成乙個大檔案。2 採用combinetextinputfor...
MapReduce程式的優化
mapreduce程式的優化主要集中在兩個方面 乙個是運算效能方面的優化 另乙個是io操作方面的優化。具體體現在以下的幾個環節之上 1.任務排程 a.盡量選擇空閒節點進行計算 b.盡量把任務分配給inputsplit所在機器 2.資料預處理與inputsplit的大小 盡量處理少量的大資料 而不是大...
mapreduce優化方案
1.任務排程 任務排程是hadoop中重要的環節 1.計算方面,hadoop會將任務分配給空閒機器,使所有的任務能公平地分享系統資源。2.i o資料流方面,會盡量將map任務分配給inputsplit所在的機器,減少i o操作。2.資料預處理與inputsplit的大小 1.mapredue適合處理...