Hadoop五大过程举例(以单词统计为例)
一、Input
输入:
File1:
Hadoop flink Hadoop
Hbase spark flink
File2:
hue hive hive spark spark
hadoop spark spark hbase
1、对文件进行分片(文件大小默认128M),以下假设分片为两片
2、转换为key value形式
Split1:
Key value
0 Hadoop Flink Hadoop
20 Hbase Spark Flink
Split2:
Key value
1 Hue Hive Hive Spark Spark
26 Hadoop Spark Spark Hbase
二、Map
Map
根据分片的数量启动队相应的maptask数量,每个maptask调用对应的map方法。
将输入的文件按照中的value进行拆分,将每个字母作为key,每个value记为1。
MAPTASK1:
Hadoop 1
Flink 1
Hadoop 1
Hbase 1
Spark 1
Flink 1
MAPTASK2:
Hue 1
Hive 1
Hive 1
Spark 1
Spark 1
Hadoop 1
Spark 1
Spark 1
Hbase 1
Mapshuffle:
Spill过程(溢写):将内存中的数据写入磁盘变成文件:
1、 每个maptask会将自己的处理结果放入一个环形的内存缓冲区中(100M)
2、 当缓冲区达到80%的时候会触发溢写,进行相应的排序,以及分区(本质时打标签,表明属于哪一个reduce进程),最后不满80%的也作为一个文件写入。
对内容进行分区以及排序如下:排序方法为快速排序。
MAPTASK1:filea
Hadoop 1 reduce1
Hadoop 1 reduce1
Hbase 1 reduce1
Flink 1 reduce2
MAPTASK1:fileb
Flink 1 reduce2
Spark 1 reduce2
MAPTASK2:filea
Hadoop 1 reduce1
Hbase 1 reduce1
Hive 1 reduce1
Hive 1 reduce1
MAPTASK2:fileb
Hue 1 reduce1
Spark 1 reduce2
Spark 1 reduce2
Spark 1 reduce2
Spark 1 reduce2
Merge过程(排序合并):每个maptask会将自己生成的所有小文件进行合并,保证每个maptask只有一个大文件:
把每个maptask进行合并并且进行排序:排序方法为归并排序。
Maptask1:
Hadoop 1 reduce1
Hadoop 1 reduce1
Hbase 1 reduce1
Flink 1 reduce2
Flink 1 reduce2
Spark 1 reduce2
Maptask2:
Hadoop 1 reduce1
Hbase 1 reduce1
Hive 1 reduce1
Hive 1 reduce1
Hue 1 reduce1
Spark 1 reduce2
Spark 1 reduce2
Spark 1 reduce2
Spark 1 reduce2
三、Reduce
Reduceshuffle:
Merge:通过Http协议每个reducetask会到每个maptask的结果中去取自己的数据。
ReduceTask1:
Maptask1:
Hadoop 1 reduce1
Hadoop 1 reduce1
Hbase 1 reduce1
Maptask2:
Hadoop 1 reduce1
Hbase 1 reduce1
Hive 1 reduce1
Hive 1 reduce1
Hue 1 reduce1
Reducetask2:
Maptask1:
Flink 1 reduce2
Flink 1 reduce2
Spark 1 reduce2
Maptask2:
Spark 1 reduce2
Spark 1 reduce2
Spark 1 reduce2
Spark 1 reduce2
合并过程中进行新的排序:(排序方法同样为归并排序)
Reducetask1:
Hadoop 1
Hadoop 1
Hadoop 1
Hbase 1
Hbase 1
Hive 1
Hive 1
Hue 1
Reducetask2:
Flink 1
Flink 1
Spark 1
Spark 1
Spark 1
Spark 1
Spark 1
Group:将merge后的结果进行分组,同一组的结果放在同一个key的value中:
Reducetask1:
Hadoop 1 1 1 1
Hbase 1 1
Hive 1 1 1
Reducetask2:
Flink 1 1
Spark 1 1 1 1 1
Reduce:将shuffle中的结果进行聚合,对一条数据调用reduce方法:
Reduce task1:
Hadoop 4
Hbase 2
Hive 3
Reduce task2:
Flink 2
Spark 5
四、output(将结果进行输出)
文件一:part-r-00000
Hadoop 4
Hbase 2
Hive 3
文件2:part-r-00001
Flink 2
Spark 5
注:map中的两个排序以及reduce中的排序均调用排序其或者compareto方法来实现,实现的方法不同。