Hadoop之MapReduce開發總結
@目錄
- 1.輸入資料介面:InputFormat
- 2.邏輯處理介面:Mapper
- 3.Partitioner分割槽
- 4.Comparable排序
- 5.Combiner合併(可選)
- 6.Reduce端分組GroupingComparator
- 7.邏輯處理介面:Reducer
- 8.輸出資料介面:OutputFormat
1.輸入資料介面:InputFormat
(1)預設使用的實現類是:TextInputFormat
(2)TextInputFormat的功能邏輯是:一次讀一行文字,然後將該行的起始偏移量作為key,行內容作為value返回。
(3)KeyValueTextInputFormat
每一行均為一條記錄,被分隔符分割為key,value。預設分隔符是tab(\t)。
(4)NlinelnputFormat
(5)
CombineTextlnputFormat
可以把多個小檔案合併成一個切片處理,提高處理效率。(6)使用者還可以
自定義InputFormat
。
2.邏輯處理介面:Mapper
使用者根據業務需求實現其中三個方法:map()、setup()、cleanup()
3.Partitioner分割槽
(1)有預設實現HashPartitioner
,邏輯是根據key的雜湊值和numReduces來返回一個分割槽號;key.hashCode() & Integer.MAXVALUE%numReduces
(2)如果業務上有特別的需求,可以自定義分割槽。
4.Comparable排序
(1)當我們用自定義的物件作為key來輸出時,就必須要實現·WritableComparable·介面,重寫其中的compareTo()
方法。
(2)部分排序:對最終輸出的每一個檔案進行內部排序。
(3)全排序:對所有資料進行排序,通常只有一個Reduce。
(4)二次排序:排序的條件有兩個。
5.Combiner合併(可選)
Combiner合併可以提高程式執行效率,減少IO傳輸。但是使用時必須不能影響原有的業務處理結果。
6.Reduce端分組GroupingComparator
Mapreduce框架在記錄到達Reducer之前按鍵對記錄排序,但鍵所對應的值並沒有被排序。一般來說,大多數MapReduce程式會避免讓Reduce函式依賴於值的排序。但是,有時也需要通過特定的方法對鍵進行排序和分組以實現對值的排序。
7.邏輯處理介面:Reducer
使用者根據業務需求實現其中三個方法:reduce()、setup()、cleanup()
8.輸出資料介面:OutputFormat
(1)預設實現類是TextOutputFormat
,功能邏輯是:將每一個KV對,向目標文字檔案輸出一行。
(2)將SequenceFileOutputFormat
輸出作為後續MapReduce任務的輸入,這便是一種好的輸出格式,因為它的格式緊湊,很容易被壓縮。
(3)使用者還可以自定義OutputFormat。