1)MapReduce 易于编程
2)良好的扩展性
3)高容错性
4)适合 PB 级以上海量数据的离线处理
1)不擅长实时计算
2)不擅长流式计算
3)不擅长 DAG(有向无环图)计算
(1)分布式的运算程序往往需要分成至少 2 个阶段。 (2)第一个阶段的 MapTask 并发实例,完全并行运行,互不相干。 (3)第二个阶段的 ReduceTask 并发实例互不相干,但是他们的数据依赖于上一个阶段 的所有 MapTask 并发实例的输出。 (4)MapReduce 编程模型只能包含一个 Map 阶段和一个 Reduce 阶段,如果用户的业 务逻辑非常复杂,那就只能多个 MapReduce 程序,串行运行。 总结:分析 WordCount 数据流走向深入理解 MapReduce 核心思想。
MrAppMaster
:负责整个程序的过程调度及状态协调。
(2)MapTask
:负责 Map 阶段的整个数据处理流程。
(3)ReduceTask
:负责 Reduce 阶段的整个数据处理流程。Text
类型的其他类型都是在Java类型的后面加了 Writable
( 1 ) 用户自定义的Mapper要继承自己的父类 ( 2 ) Mapper的输入数据是KV对(K:偏移量,V:对应的内容)的形式(KV的类型可自定义) ( 3 ) Mapper中的业务逻辑写在map()方法中 ( 4 ) Mapper的输出数据是KV对的形式(KV的类型可自定义) ( 5 ) map() 方法(MapTask进程)对每一个<K,V>调用一次
( 1 ) 用户自定义的Reducer要继承自己的父类 ( 2 ) Reducer的输入数据类型对应Mapper的输出数据类型,也是KV ( 3 ) Reducer的业务逻辑写在reduce()方法中 ( 4 ) ReduceTask进程对每一组相同k的<k,v>组调用一次reduce()方法
YARN
集群,提交的是封装了MapReduce程序相关运行参数的job
对象