MapReduce流程
将文件上传到HDFS中,默认每128M切分为一个block块,
MapReduce会对数据进行逻辑上的切片(split),并不是实际上的切分,默认与block块的大小一致为128M,
根据split切分产生map任务,切片越多产生的map任务就越多,map默认每次读取一行数据,map阶段产生的数据会进入环形缓冲区中(基于内存设计的一种数据结构,大小默认为100M),
map根据reduce的数量(默认数量为1)以及数据本身的值进行分区编号(底层与哈希值有关),然后会进行快速排序,(这里编号的作用是决定这条数据会被哪一个reduce进行拉取聚合处理)
当写入环形缓冲区的数据达到环形缓冲区的80%的时候开始向磁盘溢写一个小文件,
当环形缓冲区的写到磁盘结束之后,会创建一个新的进程将小文件进行归并排序成一个新的文件,这个文件就是map任务的结果文件,这个文件也是排序好了的
reduce会对这些map任务的结果文件进行拉取操作,拉取属于自己的结果数据,有几个map任务的结果文件就拉取几次,
拉取过后会先将分区编号去掉,然后对这些数据进行归并排序,归并完成执行reduce任务,每个reduce会生成一个结果文件,最终这些文件还是在HDFS上的
标签:map,文件,流程,reduce,MapReduce,拉取,缓冲区 From: https://www.cnblogs.com/peculiar/p/18194287