一、定义

分布式运算程序的编程框架,将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发的运行在一个Hadoop集群上。


二、优点

1. 易于编程

只需要简单实现一些接口,就可以完成一个分布式程序,也就是说以编写简单的串行程序的方式编写分布式程序。

2. 扩展性良好

通过简单的增加机器即可扩展计算能力

3. 高容错性

Hadoop内部即可自动在某一台机器挂了的时候将任务转移到另一个节点上运行,不至于这个任务运行失败。

4. 适合PB级以上海量数据的离线处理

可以实现上千台服务器集群并发工作


三、缺点

1. 不擅长实时计算

涉及节点的启动,延迟高

2. 不擅长流式计算

MapReduce的设计特点决定了其数据输入是静态的,而流式数据计算需要动态的输入数据

3. 不擅长DAG(有向图)计算

DAG计算即多个任务存在依赖关系,前一个任务的输出成为后一个任务的输入。MapReduce存储基于磁盘,需要经历写入磁盘再从磁盘读出的过程,性能非常低。


四、MapReduce编程思想

  1. 分为两个阶段:Map阶段和Reduce阶段
  2. Map阶段并发多个MapTask,且互不相干
  3. Reduce阶段并发多个ReduceTask,依赖Map阶段的输出且互不相干
  4. 一个MapReduce程序仅允许有且仅有一个Map阶段和Reduce阶段