1. 程式人生 > 實用技巧 >Hadoop之MapReduce開發總結

Hadoop之MapReduce開發總結

@目錄

1.輸入資料介面:InputFormat

(1)預設使用的實現類是:TextInputFormat
(2)TextInputFormat的功能邏輯是:一次讀一行文字,然後將該行的起始偏移量作為key,行內容作為value返回。
(3)KeyValueTextInputFormat每一行均為一條記錄,被分隔符分割為key,value。預設分隔符是tab(\t)。
(4)NlinelnputFormat

按照指定的行數N來劃分切片。
(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。