MapReduce
优点
1. 易于编程,用户只关心业务逻辑,实现框架的接口。
2. 良好的扩展性,可以动态增加服务器,解决计算资源不够问题。
3. 高容错性,任何一个机器挂掉,可以将任务转移到其他节点。
4. 适合海量数据计算(TB/PB),几千台服务器共同计算。
缺点:
1. 不擅长实时计算(时间比较长)。
2. 不擅长流式计算(一条一条的过来处理), sparkstreaming和flink擅长。
3. 不擅长DAG有向无环图计算,spark擅长。
核心编程思想
(1)分布式的运算程序往往需要分成至少2个阶段。
(2)第一个阶段的MapTask并发实例,完全并行运行,互不相干。
(3)第二个阶段的ReduceTask并发实例互不相干,但是他们的数据依赖于上一个阶段的所有MapTask并发实例的输出。
(4)MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序,串行运行。