初学mapreduce,通过对书本上的整理,简单归纳一下mapreduce的原理。
假设我们要处理的原始文件有8000万行记录,那么mapreduce是以什么样的原理对他进行处理的。
MapReduce由一下几个部分组成:
- Mapper:映射器
- Mapper助理InputFormat:输入文件读取器
- Shuffle:运输队
- Shuffle助理Sorter:排序器
- Reducer:规约器
- Reduce助理OutputFormat:输出结果写入器
流程如图所示,分为以下几个步骤:
- 数据分片:
把原始文件的8000万行记录由系统分配给100个Mapper来处理,每个Mapper处理80万行记录。相当于MapReduce通过数据分片的方式,把数据分发给多个单元来处理,这是分布式计算的第一步。 - 数据映射。
数据分片以后,由InputFormat从文件的输入目录中读取这些记录,在由Mapper对记录进行解析,并重新组织成新的格式。最后由Mapper将自己处理的结果输出,等待Shuffle运输队取走结果。 - 数据混洗。
由Shuffle运输队把获取的结果按照相同的键(Key)进行汇集,再把结果送到Sorter处进行排序处理,然后提交给Reducer。 - 数据归纳。
Reducer收到传输过来的结果进行汇总与映射工作,得到最终计算结果。最后由OutputFormat把结果输出到指定位置。
上述分析最核心的就是Map任务和Reduce任务,通过Map任务把一个大任务分成很多小人物,关键就是这些小任务是同时运行的。再通过Reduce任务,把很多小任务的结果汇总起来,最后输出汇总结果。