简介
- 分布式编程架构
- 以数据为中心,更看重吞吐率
- 分为治之
- Map将一个任务分解为多个子任务
- Reduce将分解后多任务分布处理,并将结果汇总最终结果
体系结构图
基本概念
- 作业(Job)
- 任务(Task) MapTask/ReduceTask
- 键值对(key/value pair)
Map()、Reduce()函数的输入、输出都是
生命周期
提交作业:
- 在作业提交之前,需要对作业配置
- 程序代码,主要是自己编写的MapReduce程序
- 配置输入输出路径、输出是否压缩
- 配置完成后,通过JobClient来提交
作业调度
- FIFO调度器、公平调度器、容量调度器
任务分配
- TaskTracker和JobTracker之间的通信与任务的分配时通过心跳机制完成的
- TaskTracker会主动向JobTracker询问是否有作业要做,如果自己可以做,那么就会申请到作业任务,这个任务可以使Map也可能是Reduce任务
任务的执行
- 拷贝代码到本地
- 拷贝任务的信息到本地
- 启动JVM运行任务
状态更新
- 任务在运行过程中,首先会将自己的状态汇报给TaskTracker,然后由TaskTracker汇总告之JobTracer
- 任务进度是通过计数器来实现的
- JobTracker是接受到最后一个任务运行完成后,才会将作业标志为成功
- 作业成功后执行删除中间结果等善后处理工作