首页 > 大数据 > 数据挖掘 > 好程序员大数据培训分享MapReduce理解
好程序员 大数据 培训分享MapReduce 理解,本篇文章 就给大家分享一下大数据MapReduce 理解。
为什么需要MapReduce? 因为 MapReduce 可以“分而治之”,将计算大数据的复杂任务分解成若干简单小任务。“简单”的意思是:计算规模变小、就近节点计算数据、并行任务。
一句话版本:
输入文件 -> 【 map 任务】 split --> map --> partition --> sort --> combine( 写内存缓冲区 ) ~~ spill( 独立线程写磁盘 ) --> merge --> map 输出结果 ~~~ 【 reduce 任务】 copy --> merge -->reduce --> 输出文件
M 个 map 任务开始并处理分配到的多个 split 数据。
Partition :
作用:将map 阶段的输出分配给相应的 reducer , partition 数 == reducer 数
默认是HashPartitioner 。之后将输出数据写入内存缓冲区 memory buff 。
spill:
当memory buff 的数据到达一定阈值时,默认 80% ,将出发溢写 spill ,先锁住这 80% 的内存,将这部分数据写进本地磁盘,保存为一个临时文件。此阶段由单独线程控制,与写 memory buff 线程同步进行。
sort & combine :
在spill 写文件之前,要对 80% 的数据 ( 格式 ) 进行排序,先 partition 后 key ,保证每个分区内 key 有序,如果 job 设置了 combine ,则再进行 combine 操作,将 这样的数据合并成,最终输出一个 spill 文件。
多个spill 文件通过多路归并排序,再合并成一个文件,这是 map 阶段的最终输出。同时还有一个索引文件 (file.out.index) ,记录每个 partition 的起始位置、长度。
reduce 阶段:
copy :多线程并发从各个 mapper 上拉属于本 reducer 的数据块 ( 根据 partition) ,获取后存入内存缓冲区,使用率达到阈值时写入磁盘。
merge :一直启动,由于不同 map 的输出文件是没有 sort 的,因此在写入磁盘前需要 merge ,知道没有新的 map 端数据写入。最后启动 merge 对所有磁盘中的数据归并排序,形成一个最终文件作为 reducer 输入文件,至此 shuffle 阶段结束。
reduce :和 combine 类似,都是将相同的 key 合并计算,最终结果写到 HDFS 上。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69913864/viewspace-2737300/ ,如需转载,请注明出处,否则将追究法律责任。