Shuffle是mapReduce的核心,要想理解MapReduce, Shuffle是必须要了解的。

MapReduce shuffle叙述

文字叙述:

1.mapTask的数量来源于切片的数量,mapTask读取数据时默认用的是TextInputFormat中的RecordReader的read方法读取一行数据,返回给们自定义的mapper,如果没有自定义mapper,框架中有默认的mapper,会把读取的数据原样输出。

2.读取后context.write方法写出,通过outputCollector组件输出到环形缓冲区里(数组),默认是100M的大小。外面有指针指向待溢出的当前的数值

3.环形缓冲区中的数据到达总大小的80%时会进行溢出操作,剩下的20%空间做排序用,默认是快速排序。通过splier溢出到本地

在溢出之前先对环形缓冲区中要溢出的数据进行分区(hashpartitioner,通过key的hashcode%reduceNum)和排序(sort)

4.每次溢出后都会产生一定的文件,全部溢出后会将本地的文件进行一次合并,其余的mapTask也同时进行合并操作

5.此时MrAppMaster会通知reduceTask来读取数据,每次读取自己指定区的一组数据,是根据groupingComparator(key,nextKey)组件来进行确认,返回给自定义的reducer

6.reducer中的context.write方法调用outputFormat组件(默认是TextOutputFormat)中的recordWrite的write写出到hdfs上,最终形成part-r-00000这样的输出文件


相关文章:

  • 2021-07-26
  • 2021-08-27
  • 2021-07-09
  • 2021-11-04
  • 2021-07-28
  • 2021-10-11
  • 2021-11-20
  • 2021-10-12
猜你喜欢
  • 2021-10-17
  • 2021-06-19
  • 2021-06-21
  • 2021-07-29
  • 2022-12-23
  • 2021-04-05
  • 2021-12-20
相关资源
相似解决方案