0.input 输入
InputFormat 类来处理数据选择
1.spilt 分片
将数据切分为 Key-Value (K1和V1)键值对,k1=文件的磁盘地址,value=每行的数据
2.map
由实现map方法来定义,自定义Map逻辑,将第一步的结果转换成另外的 Key-Value (K2和V2)键值对
3.shuffle(核心)
- 对上述输出的Key2-Value2
键值对进行分区,同时在这里打标识的操作,后面reducetask会根据这个标志来拉取指定的Key2-Value2键值对。分区如按照key长度来分,比如<5的个数分为一类。 - 对不同分区的数据按照相同的Key 排序,这里有是内存中排序,环形缓存默认100M,80%触发溢出,会直接落磁盘,然后merge文件。这里有的思想:就是当处理大量数据排序时,可以优先让一部分数据先保存落盘,然后进行归并排序来处理整体!
- (非必要,可以配置选择)对分组过的数据初步规约,目的是降低数据的网络拷贝
- 对数据进行分组,相同 key的value
放入一个集合中,为了节约空间。然后等待reducetask来拉取
注意:先有分区后再有的分组,reducetask是根据分区来拿的。还有那个megre后的文件不一定代表数据一定有序的,最终有序会在reducetask中保证。
4.reduce
- 拉取所属相同分区的数据(前面的标识)到指定的reducetask中,结果进行排序以人及合并,然后执行实现reduce类的reduce方法进行处理,转为新的Key-Value(K3和V3)
- 输出 设置 OutputFormat 处理并保存reduce 输出的 Key3-Value3 数据
5.ouput
指定输出