一、理解MapReduce思想
MapReduce思想在生活中处处可见。或多或少都曾接触过这种思想。
MapReduce的思想核心是“分而治之”,适用于大量复杂的任务处理场景(大规模数据处理场景)。即使是发布过论文实现分布式计算的谷歌也只是实现了这种思想,而不是自己原创。
Map负责“分”,即把复杂的任务分解为若干个“简单的任务”来并行处理。
可以进行拆分的前提是这些小任务可以并行计算,彼此间几乎没有依赖关系。
Reduce负责“合”,即对map阶段的结果进行全局汇总。
这两个阶段合起来正是MapReduce思想的体现。
还有一个比较形象的语言解释MapReducc:
我们要数图书馆中的所有书你数1号书架,我数2号书架。这就是“Map”我们人越多,数书就更快。
现在我们到一起,把所有人的统计数加在一起。这就是“Reduce”。
比如我们要统计一个文件中出现的单词的次数,
传统思想就是写一个Java程序去获取文件到本地,统计到的思路 要把文件的所有块拉取过来,然后统计。如果数据特别大,拉取数据就比较耗时。
如果我们采用分布式计算思想(MapReduce)明显效率会比较高。
二、深入理解MapReduce原理
MapReduce程序的执行流程图