1. 程式人生 > >Hadoop 之 MapReduce

Hadoop 之 MapReduce

MapReduce 過程細節分析

1/  map階段結果<key, value>傳遞給reduce階段時, 預設是按照key中ASCII 排序的,若key 被構造成bean,則需要制定bean的compareTo方法,此時bean對應的class需要實現writableComparable介面。

 

2/ reduce階段,將map階段結果<key, value>進行處理,預設ReduceTasks的數量為1。若將map結果進行分組處理,則需要告知分組的方法,即寫一個class要extends Partitioner , 並override getPartitioner 方法,還需定義ReduceTask 數量。

  • 設定reduce的任務併發數為6,應該跟分組的數量保持一致
  •  job.setNumReduceTasks(6);     

設定Task 數量大於6,任務可以執行,多餘的任務不能分配到資料而已

設定Task 數量小於6,任務不可以執行,資料分配不到預定的任務中因此報錯!

設定Task 數量等於1,任務可以執行,所有的資料均分到第一個任務中。

 

3/ map task 的併發數使用切邊split的數量決定的,有多少個切片就有多少個map task,切片是一個邏輯概念,是指檔案資料的偏移量範圍,切片的具體大小根據所處理的檔案大小來調整。若檔案很小,一個split對應多個block,若檔案較大,則一個split對應一個block。