Hadoop深入学习:MapReduce作业的提交流程和作业的生命周期

        在本节中我们主要来学习MapReduce作业的提交流程和作业的生命周期。
        一个标准的MapReduce作业的执行包括的流程是:代码编写——>作业配置——>作业提交——>Map Task的分配与执行——>处理中间结果(shuffle阶段)——>Reduce Task的分配与执行——>输出最终结果数据——>作业完成。下面是详细的作业流程:


        MapReduce作业的生命周期如下图所示:


        如上图所示,MapReduce作业的生命周期涉及5个步骤:
        1)、作业提交初始化。
             用户提交作业后,首先由JobClient对象将作业的相关信息上传到HDFS上,其中分片元信息记录了每个输入分片数据起始位置、长度和逻辑位置等信息。然后JobClient对象通过RPC通知JobTracker,而JobTracker受到新作业的提交请求后,有作业调度模块开始对作业进行初始化:为作业创建一个JobInProgress对象已跟综整个作业的运行状况,而JobInProgress则会为作业分解的每一个Task(Map Task和Reduce Task)创建一个TaskInProgress对象以跟踪每一个任务的运行状态,TaskInProgress有可能需要管理多个Task Attempt。
        2)、任务调度与监控。
             之前我们已经学过,MapReduce的任务调度和监控功能都有JobTracker完成,TaskTracker节点会周期性的通过心跳向JobTracker节点汇报本节点的状况,一旦有空闲资源出现,JobTracker就会按一定的策略选一个合适的任务使用该空闲资源,这个工作有任务调度起来完成,选择任务时需要重点考虑执行任务的数据本地性。
             JobTracker跟踪作业整个的执行过程。当某个Task的执行进度远远落后于同一类作业的其他Task时,JobTracker会执行推测式执行,在其他TaskTracker上启动一个相同的Task,并选取执行速度最快的Task结果为最终结果,并杀死较慢的Task。
        3)、任务运行时环境准备。
             为运行时环境准备包括JVM启动和支援隔离,均由TaskTracker节点实现,为每一个Task启动一个独立运行JVM以避免不同的Task在运行是相互影响。
        4)、任务执行。
             在运行时环境准备好后,TaskTracker便会启动Task,然后再整个任务运行过程中,周期性的向JobTracker发送心跳来汇报自己的状态,并接受相关命令。
        5)、作业完成。

猜你喜欢

转载自flyingdutchman.iteye.com/blog/1876152
今日推荐