MapReduce快速入門系列(16) | MapReduce開發總結

此篇文章講述的是MapReduce的開發總結,希望能夠幫助到各位小可愛呀!


在編寫MapReduce程序時,需要考慮如下幾個方面:

1. 輸入數據接口:InputFormat

  • 1. 默認使用的實現類是:TextInputFormat
  • 2. TextInputFormat的功能邏輯是:一次讀取一行文本,然後將改行的起始偏移量作爲key,行內容作爲value返回。
  • 3. KeyValueTextInputFormat每行均爲一條記錄,被分隔符分割爲key,value。默認分隔符爲tab(\t)。
  • 4. NlineInputFormat按照指定的行數N來劃分切片。
  • 5. CombineTextInputFormat可以把多個小文件合併成一個切片處理,提高處理效率。
  • 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

  在Reduce端對key進行分組。應用於:在接收的key爲bean對象時,想讓一個或幾個字段相同(全部字段比較不相同)的key進入到同一個reduce方法時,可以採用分組排序。

7. 邏輯處理接口:Reducer

  用戶根據業務需求實現其中三個方法:reduce() setup() cleanup()

8. 輸出數據接口:OutputFormat

  • 1. 默認實現類是TextOutputFormat,功能邏輯是:將每一個KV對,向目標文本文件輸出一行。
  • 2. 將SequenceFileOutputFormat輸出作爲後續MapReduce任務的輸入,這便是一種好的輸出格式,因爲它的格式緊湊,很容易被壓縮。
  • 3. 用戶還可以自定義OutputFormat

本次的分享到這裏就結束了,雖然有點少,但是乾貨滿滿呀!,希望被幫助的小可愛們能夠點點關注!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章