MapReduce 是一个分布式运算程序的编程框架。
- 任务拆分,并行运算
- 最后把结果统一(Reduce 即 合)
即先分后合。
- 先切片,分发到不同的 map 任务,map 任务对数据做分区
- 相同的分区分发到同一个 Reduce 任务,合并结果输出

优点:
- 易编程。实现相关接口,就可以完成分布式程序。写法和串行程序一致。
- 易扩展。计算资源不够,可以简单的增加机器。
- 高容错。运行中的机器宕机,计算任务会被转移到另一个节点上运行。
- 适合 PB(1024TB)级海量数据的离线处理。
缺点:
- 不擅长实时计算。涉及落盘的IO操作
- 不擅长流式计算。
- 流式计算的输入数据是动态的,而 MapReduce 的输入数据是静态的,不能动态变化。
- MapReduce 自身设计决定了数据源必须是静态的,即稳定源文件。
- 不擅长 DAG(有向无环图)计算。
- 每个 MapReduce 的结果都会写入磁盘,造成大量 IO,造成性能下降。

