Hadoop其实没那么复杂,对每个子功能进行细分,一一解读,就可化整为零。
MapReduce
调度过程
——
主要角色
- JobTracker
Hadoop任务调度的主脑,整个集群中的唯一角色,负责任务的分配。
侦听TaskTracker传来的心跳消息并从中获取TaskTracker状态,根据状态向TaskTracker发送任务控制指令。 - TaskTracker
任务的实际执行者,一般在集群的每台机器上启动一个TaskTracker实例。
定时向JobTracker发送心跳消息,报告当前节点及其中任务的状态。
接收JobTracker指令,根据指令要求处理任务。 - Scheduler
封装调度算法和策略的逻辑实体,JobTracker做任务调度时调用其中的方法,判定任务执行的先后顺序。
作为Daemon方式在后台执行,判断是否需要对Task进行杀死等特殊操作。
MapReduce调度过程——任务初始化
-
JobClient接收客户端作业提交请求检查输入输出路径计算文件分块拷贝作业Job及配置文件到HDFS
-
JobTracker为每个TaskTracker计算任务队列
MapReduce
-
每个固定的时间间隔,TaskTracke向JobTracker发送的固定格式状态报告信息。
- 任务调度时关联JobTracker和TaskTracker的纽带。JobTracker在收到心跳之后触发新的任务分配逻辑。TaskTracker从心跳Response中获取JobTracker的指示并做相应执行。
- 内容包括:
TaskTracker Id
Host IP
TaskTracker上所有任务状态列表(开始、结束时间,任务状态等)TaskTracker执行的最大Map/Reducer限制
是否可接收新任务等
Scheduler基本原理
- 主要算法有
FIFO
Capacity Scheduler
Fair Scheduler
-
TaskScheduler
JobTracker在构造是根据配置创建配置文件所定义的scheduler。在启动时会调用Scheduler的Start方法 。scheduler启动之后,拥有对各个task的控制能力,可以对task进行杀死等操作。就可用的任务槽位时,在JobTracker会调用scheduler的assignTasks方法决定将调用哪些Task首先执行。