Map Reduce 和 shuffle过程 浅述
概念明确:
笼统的说就是两个过程:map和reduce。map 负责数据的过滤分发,reduce负责数据的计算归并;
在map和reduce中间有个被叫做“神奇发生的地方”就是shuffle过程,其实数据的大量的处理任务都有shuffle完成,
首先要明确的是:shuffle不是一个单独的过程,它横跨map和reduce端
shuffle包括map端的spill(溢写)过程,reduce端的copy(提取map输出数据)和sort(分组合并)过程。
map任务:
单独的map()职责很明确,就是将输入的k—v对做个转换,输出依旧是k-v,只是形式已经发生变化;
就拿经典入门例子wordcount(单词统计)来说,在map()之前,文件的读入有个方法inputformat,
他就已经将文件按需求(可自定义)进行切割,并按k-v的形式输出(此时的k是数据的偏移量,v是具体的数据)
这就明确了map读入的数据就已经是k-v(偏移量-具体数据),读入之后就要用map()方法进行处理,
结果还是k-v形式,此时的k是是实体数据,v是词频标记统计,如果不自行定义的话,其值就是1。
这样map阶段的map()已经结束了,然后就进入了shuffle过程(依旧还在map端)!
map将map()后的k-v不断的输出到内存中,此时内存中构造了一个环形数据结构(简单的理解,环形是为了更有效的使用内存),
环形数据结构的优点就是可以一边写入,一边读出。默认大小是100M,但不是说当存满100M就才开始读出,或者可以随时读出
它设定一个阈值:80M 就是当写入的数据达到