MapReduce是将一个大任务分成多个小任务(Map),并执行之后,合并结果(reduce).
- 其实许多分析计算的过程都可以拆分成两个步骤
- Map:分成多个子任务
- reduce:合并所有子任务的执行结果
- 举一个例子:
假设现在有1000副扑克牌,其中有一个副扑克牌中少了一张,如何找出少了哪一张牌?
- 如果使用MapReduce的方式就是先将1000副扑克牌分成多份,比如说分成5份,交由5个人手中,每个人开始将手中的牌进行分类计算,每个人都会得出A有几张,2有几张等等,最后得出结果,分析下哪类牌比预计少了一张就可以知道是少了哪一张牌.
MapReduce运行流程
- 基本概念
Job与Task
一个Job为一个作业,一个作业可分为多个Task,Task也可分为MapTask与ReduceTask
JobTracker的角色
负责作业调度
分配任务,监控任务执行进度
监控TaskTracker
TaskTracker的角色
执行任务
汇报任务状态
- MapReduce执行作业过程
第一步得到数据时先将数据进行分片,然后拆分成多个Map任务,接着执行Map任务得到一个中间结果,这些中间结果都是一些key-value对数据,接着有这些中间结果得到多个Reduce任务,当最后执行完这些Reduce任务之后得到最后结果,将最后结果输出到HDFS或者其他位置.
任何任务都是先提交到JobTracker
- MapReduce的容错机制
- 重复执行,当一个任务执行出错了,会重复执行4次,如果4次之后还是出错则放弃
- 推测执行,当一个任务执行的时间特别长,或者特别慢的时候,则会新增一个同样的任务执行,直到其中一个任务执行完毕才会停止另一个任务.