此篇文章講述的是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
本次的分享到這裏就結束了,雖然有點少,但是乾貨滿滿呀!,希望被幫助的小可愛們能夠點點關注!