MapReducer工作流程
读数据
1.客户端提交作业任务;
2.Job根据作业任务获取文件信息;
3.InputFormat将文件按照设定的切片大小(一般切片大小等于HDFS中的Block块大小)进行切片操作,并将切片的数据读入并生成一个MapTask任务;
Mapper
4.MapTask通过InputFormat获得RecordReader,从InputSplit中获取并解析出对应的key-value;
5.将解析的key-value经由编写的map()方法进行处理并产生新的key-value;
6.将生成的key-value进行第一次排序,排序后的数据将进行落盘操作;
Shuffle
7.由Map阶段生成的key-value首先进入(位于内存中的)一个环形缓冲区,该缓冲区的大小默认为100M;
8.当环形缓冲区中的数据大小达到整个缓冲区大小的80%时,缓冲区将会把数据溢出并进行分区和排序操作,之后将会进行第一次溢写操作,完成溢写后可以对数据进行合并(combiner);
9.此时数据可以进行再次的分区、排序、合并,之后将溢出到文件;
Reducer
10.ReducerTask将数据拷贝到本地磁盘,并进行归并排序操作;
11.按照key值将数据进行分组操作,相同的key的数据将会由一个reducer方法进行处理;
12.最后ReduceTask将汇总所有reducer()方法输出的结果;
写数据
13.OutputFormat从Reducer中获取数据并通过RecordWriter将数据写入文件。