首先,我们来看如下的一张图:
作业的整个运行过程分为5个步骤:
1、作业的提交和初始化。
用户提交作业后,由JobClient实例将作业相关信息(jar包、配置文件xml、分片元信息等)上传到HDFS。
然后,JobClient通过RPC通知JobTracker。JobTracker接收到新作业请求后,由作业调度模块对作业进行初始化,为作业创建一个JobInProgress对象以跟踪作业的运行状况,而JobInProgress则会为每个Task创建一个TaskInProgress对象以跟踪每个任务的运行状态,而TaskInProgress可能需要管理多个Task运行尝试(Task Attempt)。
2、任务调度和监控。
通过MapReduce的架构简介,我们知道,任务的调度和监控由JobTracker完成。TaskTracker通过Heartbeat周期性地向JobTracker汇报本节点的资源使用情况,一旦出现空闲资源,任务调度器按照一定的策略选择合适的任务使用该空闲资源。另外,JobTracker还跟踪整个作业的运行过程,保证作业最终顺利完成。
3、任务运行环境的准备。
运行环境包括JVM启动和资源隔离,这些都由TaskTracker实现。
4、任务的执行。
启动Task后,每个Task的最新进度先由Task通过RPC汇报给TaskTracker,再由TaskTracker汇报给JobTracker。
5、作业运行完成。
直到所有Task执行完毕后,整个作业才算执行成功。