1.通过FileInputformat的文件加载器加载指定路径,底层调用LineReader进行文件读取不同逻辑切片的数据文件(并行),并按行解析成键值对,其中key为每行相对于首行的偏移量,value为每一行的值,每个键值对调用一次map()函数;
2.用户写map()函数,对输入的<key,value>对进行处理,并输出新的<key,value>对;
3.输出的数据经过一个收集器收集后到达环形缓冲区(每个maptask对应一个),开始溢写数据,达到阈值后溢写到磁盘中,在进入磁盘前会进行一次排序,先按分区排序,再在同一分区内部按照key排序;
4.reduceTask启动多个线程从不同的maptask中拉取对应分区的数据(默认5个线程),并进行文件归并,再次进行一次排序(使用归并排序算法),分组,每组调用一次reduce方法,用户通过重写reduce函数,对输入的key、value进行处理,得到新的key、value输出结果;
5.将reduce输出的结果保存在文件中。