一、Combiner
如果我們有10億個數據,Mapper會生成10億個鍵值對在網絡間進行傳輸,但如果我們只是對數據求最大值,那么很明顯的Mapper只需要輸出它所知道的最大值即可。這樣做不僅可以減輕網絡壓力,同樣也可以大幅度提高程序效率。
每一個map都可能會產生大量的本地輸出,Combiner的作用是把一個map產生的多個<KEY,VALUE>合并成一個新的<KEY,VALUE>,然后再將新<KEY,VALUE>作為reduce的輸入,以減少在map和reduce節點之間的數據傳輸量,以提高網絡IO性能。
Combiner適用的場景
并不是所有情況下都能使用Combiner
Combiner適用場景
對記錄匯總的場景(如求和)
求最大值、最小值
不適用場景
求平均數
自定義Combiner
```
public static class HotCombiner extends Reducer<Text, LongWritable, Text, LongWritable> {
protected void reduce(
Text key, java.lang.Iterable<LongWritable> values, org.apache.hadoop.mapreduce.Reducer<Text, LongWritable, Text, LongWritable>.Context context) throws java.io.IOException, InterruptedException {
……
}
添加設置Combiner的代碼:
job.setCombinerClass(HotCombiner.class);
```
2. Partitioner
決定了Reducer節點的數量,
比如我們有2018年航班信息的數據,對于每個月輸出一個文件,我們就應該自定義Partitioner,實現12個Reducer節點,每個節點輸出一個文件。
```
public static class MyPartition extends Partitioner<Text, IntWritable>{
public int getPartition(Text key, IntWritable value, int num) {
……
}
添加設置Partitioner的代碼:
job.setPartitionerClass(MyPartition.class);
job.setNumReduceTasks(12);
```
- 空白目錄
- 第一章 Linux虛擬機安裝
- 第二章 SSH配置
- 第三章 jdk配置
- 第四章 Hadoop配置-單機
- 第五章 Hadoop配置-集群
- 第六章 HDFS
- 第七章 MapReduce
- 7.1 MapReduce(上)
- 7.2 MapReduce(下)
- 7.3 MapReduce實驗1 去重
- 7.4 MapReduce實驗2 單例排序
- 7.5 MapReduce實驗3 TopK
- 7.6 MapReduce實驗4 倒排索引
- 第八章 Hive
- Hive安裝
- 數據定義
- 數據操作
- 第九章 HBase
- 第十章 SaCa RealRec數據科學平臺
- 第十一章 Spark Core
- 第十二章 Spark Streaming
- 第十章 Spark測試題