hadoop(二MapReduce) 介紹 MapReduce:其實就是把數據分開處理後再將數據合在一起. Map負責“分”,即把複雜的任務分解為若幹個“簡單的任務”來並行處理。可以進行拆分的前提是這些小任務可以並行計算,彼此間幾乎沒有依賴關係。Reduce負責“合”,即對map階段的結果進行全局匯 ...
hadoop(二MapReduce)
介紹
MapReduce:其實就是把數據分開處理後再將數據合在一起.
- Map負責“分”,即把複雜的任務分解為若幹個“簡單的任務”來並行處理。可以進行拆分的前提是這些小任務可以並行計算,彼此間幾乎沒有依賴關係。
- Reduce負責“合”,即對map階段的結果進行全局彙總。
- MapReduce運行在yarn集群
MapReduce中定義瞭如下的Map和Reduce兩個抽象的編程介面,由用戶去編程實現.Map和Reduce,
MapReduce處理的數據類型是
代碼處理
MapReduce 的開發一共有八個步驟, 其中 Map 階段分為 2 個步驟,Shuwle 階段 4 個步
驟,Reduce 階段分為 2 個步驟
Map 階段 2 個步驟
- 設置 InputFormat 類, 將數據切分為 Key-Value(K1和V1) 對, 輸入到第二步
- 自定義 Map 邏輯, 將第一步的結果轉換成另外的 Key-Value(K2和V2) 對, 輸出結果
Shuwle 階段 4 個步驟
- 對輸出的 Key-Value 對進行分區
- 對不同分區的數據按照相同的 Key 排序
- (可選) 對分組過的數據初步規約, 降低數據的網路拷貝
- 對數據進行分組, 相同 Key 的 Value 放入一個集合中
Reduce 階段 2 個步驟
- 對多個 Map 任務的結果進行排序以及合併, 編寫 Reduce 函數實現自己的邏輯, 對輸入的
Key-Value 進行處理, 轉為新的 Key-Value(K3和V3)輸出 - 設置 OutputFormat 處理並保存 Reduce 輸出的 Key-Value 數據
常用Maven依賴
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<!-- <verbal>true</verbal>-->
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>true</minimizeJar>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
入門---統計
結構
/*
四個泛型解釋:
KEYIN :K1的類型
VALUEIN: V1的類型
KEYOUT: K2的類型
VALUEOUT: V2的類型
*/
public class WordCountMapper extends Mapper<LongWritable,Text, Text , LongWritable> {
//map方法就是將K1和V1 轉為 K2和V2
/*
參數:
key : K1 行偏移量(預設幾乎一直固定為LongWritable)
value : V1 每一行的文本數據
context :表示上下文對象
*/
/*
如何將K1和V1 轉為 K2和V2
K1 V1
0 hello,world,hadoop
15 hdfs,hive,hello
---------------------------
K2 V2
hello 1
world 1
hdfs 1
hadoop 1
hello 1
*/
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
Text text = new Text();
LongWritable longWritable = new LongWritable();
//1:將一行的文本數據進行拆分
String[] split = value.toString().split(",");
//2:遍曆數組,組裝 K2 和 V2
for (String word : split) {
//3:將K2和V2寫入上下文
text.set(word);
longWritable.set(1);
context.write(text, longWritable);
}
}
}
/*
四個泛型解釋: