一、什么是MapReduce?
二、MapReduce的流程
具体流程:
Map阶段:
1、利用客户端指定的InputFormat来读取数据
2、利用客户端编写的RecordReader,通过reader()方法,去读取文件,一次读一行,一行就是一份文件片
3、生成一个个键值对(K,V),K是行偏移量,V是内容
4、获取键值对,通过Mapper的Map()方法,逻辑处理生成一个个新的键值对map(k,v) : k是单词,v是个数。然后通过context.write()将(k,v)写入到OutputCollector收集器中。
Shuffle阶段:
(注 : combiner是优化)
1、将收集器里的数据放入环形缓冲区(默认100M),当环形缓冲区的数据量达到80%时,会溢出。(溢出前: 需要对环形缓冲区的键hash出一个partition值,然后根据partition分区,在相同的分区内根据键进行排序。) 如果 设置了Combiner ,那么就会将同一key的键值合并在一起,此时的文件就是有分区且分区内有序的大文件,这样可以减少网络传输。如果没有 设置Combiner, 环形缓冲区开始溢出到Map Task磁盘,此时是有分区且分区内有序的小文件。如果数据量过大,会溢出多个文件。小文件会被merge归并排序成有分区且分区内有序的大文件,此时map task结束
2、