对于这个问题
一般来说我们在使用mapreduce进行数据清洗的时候,只是用map端,因为数据的清洗一般
不会涉及到聚合的问题,所以我们经常是设置reduce的个数为0
我想这个问题,问的应该是mapreduce的运行过程吧(个人理解)
mapreduce运行过程如下:
mapreduce主要分为5个过程
input>>map>>shuffle>>reduce>>reduce
input读取文件,然后把数据转换为key-value的形式输出给map端,
map端在接收到数据后,
1、把处理过后的数据会送往 环形缓冲区 ,然后在环形缓冲区内,对数据进行分区(注意:
这里的分区是类似一个打标签的操作,标明是哪个reduce的分区)、分区内排序;
2、 在环形缓冲区达到阈值80%的时候,会开始溢写,形成多个小文件,最后合并这些小
文件,map端的shuffle结束
3、 接着,map通知appmaster,appmaster去通知reduce任务,来拉去属于自己分区内的数据,
对自己分区内的数据合并,排序
4、 对相同的key进行分组
然后reduce端结束,最后将数据写入output