和HDFS一样,MapReduce也是采用Master/Slave的架构
MapReduce1包含4个部分:Client、JobTracker、TaskTracker和Task
Client
- 将JAR文件、配置参数Configuration、计算分片、Distributed Cache 文件存储在HDFS
- 向 JobTracker 申请JobId
JobTracker
- 负责资源监控和作业调度 监控所有TaskTracker 与job的健康状况,一旦发现失败,就将相应的任务转移到其他节点
- 跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉作业调度器
- 调度器会在资源出现空闲时,选择合适的任务使用这些资源
TaskTracker
- 周期性地通过Heartbeat 将本节点上资源的使用情况和任务的运行进度汇报给JobTracker
- 接收JobTracker 发送过来的命令并执行相应的操作(如启动新任务、杀死任务等)
- 使用“slot”等量划分本节点上的资源量,“slot”代表计算资源(CPU、内存等)分配给Task 使用
Task
- 分为Map Task 和Reduce Task 两种,均由TaskTracker 启动
- Map Task 和Reduce Task 分别使用Map slot 和Reduce slot
JobTracker:存在单点故障,一旦出现故障,整个集群就不可用,出现故障之后重启一下,再把作业重新提交就可以了,它不会像 HDFS 那样出现数据的丢失
TaskTracker:周期性向 JobTracker 汇报心跳,如果一定时间内没有汇报,JobTracker 就认为该TaskTracker 挂掉了,或者TaskTracker上运行的Task失败次数太多,就会把上面所有任务调度到其它TaskTracker上
Task:MapTask和ReduceTask 也可能运行挂掉,比如内存超出了或者磁盘挂掉了,TaskTracker会汇报JobTracker,JobTracker会把该Task调度到其它节点上,但受到重试次数的限制