任务分发
- 任务由JobTracker分发给TaskTracker有两种途径
- TaskTracker会定时发送pull请求给JobTracker, 默认1s一次, 在发送pull请求之前,会检查当前TaskTracker是否有可用的空闲线程,如果没有则不会发送pull请求,同时也会检查本节点机器资源是否足够,主要是检查cpu和内存使用率,默认超过90%就不会发送pull请求,当JobTracker收到TaskTracker节点的pull请求之后,再从任务队列中取出相应的已经到了执行时间点的任务 push给TaskTracker,这里push的个数等于TaskTracker的空余线程数。
- 还有一种途径是,每个TaskTracker线程处理完当前任务之后,在反馈给JobTracker的时候,同时也会询问JobTracker是否有新的任务需要执行,如果有JobTracker会同时返回给TaskTracker一个新的任务执行。所以在任务量足够大的情况下,每个TaskTracker基本上是满负荷的执行的。