主页 > 新闻资讯 > 大数据学习:MapReduce中作业与任务运行机制

大数据学习:MapReduce中作业与任务运行机制

作者:张老师 浏览次数: 2020-12-03 17:13
MapReduce作为Hadoop框架的原生计算引擎,在Spark出现之后,受到了“冷落”,但是从本质上来说,Spark所采取的计算思想,其实也是继承的MapReduce。学习Hadoop,我们仍然需要搞懂MapReduce。今天的大数据学习分享,我们主要来讲讲MapReduce中作业与任务运行机制。

大数据学习:MapReduce中作业与任务运行机制

一、关于作业(Job)

首先,用户程序客户端通过作业客户端接口程序JobClient提交一个用户程序。

然后JobClient向JobTracker提交作业执行请求并获得一个Job ID。

JobClient同时也会将用户程序作业和待处理的数据文件信息准备好并存储在HDFS中。

JobClient正式向JobTracker提交和执行该作业。

JobTracker接受并调度该作业,并进行作业的初始化准备工作,根据待处理数据的实际的分片情况,调度和分配一定的Map节点来完成作业。

JobTracker查询作业中的数据分片信息,构建并准备相应的任务。

JobTracker启动TaskTracker节点开始执行具体的任务。

TaskTracker根据所分配的具体任务,获取相应的作业数据。

TaskTracker节点创建所需要的Java虚拟机,并启动相应的Map任务(或Reduce任务)的执行。

TaskTracker执行完所分配的任务之后,若是Map任务,则把中间结果数据输出到HDFS中;若是Reduce任务,则输出最终结果。

TaskTracker向JobTracker报告所分配的任务完成。若是Map任务完成并且后续还有Reduce任务则JobTracker会分配和启动Reduce节点继续处理中间结果并输出最终结果。

二、作业执行流程

作业提交后成,总体上可以把作业的运行和生命周期分为三个阶段:准备阶段(PREP)、运行阶段(RUNNING)和结束阶段(FINISHED)。

在准备阶段,作业从初始状态NEW开始,进入PREP.INITIALIZING状态进行初始化初始化所做的主要工作是读取输入数据块描述信息,并创建所有的Map任务和Reduce任务。

初始化成功后,进入PREP.INITIALIZED状态。此后,一个特殊的作业初始化任务(job setup task)被启动,以创建作业运行环境,此任务完成后,作业准备阶段结束作业真正进入了运行阶段。

在运行阶段作业首先处在RUNNING.RUN_WAIT状态下等待任务被调度。当第一个任务开始执行时,作业进入RUNNING.RUNNING_TASKS,以进行真正的计算。

当所有的Map任务和Reduce任务执行完成后,作业进入RUNNING.SUC_WAIT状态。此时,另一个特殊的作业清理任务(job cleanup task)被启动,清理作业的运行环境,作业进入结束阶段。

在结束阶段,作业清理任务完成后,作业最终到达成功状态SUCCEEDED,至此,整个作业的生命周期结束。在整个过程中,各个状态下作业有可能被客户主动杀死,最终进入KILLED状态;也有可,能在执行中因各种因素而失败,最终进入FAILED状态。

三、任务执行流程

任务(Task)是HadoopMapReduce框架进行并行化计算的基本单位。在MapReduce并行计算框架的实现中布千JobTracker和TaskTracker两端,分别对应TasklnProgress和TaskTracker.TasklnProgress两个对象。

当一个作业提交到Hadoop系统时,JobTracker对作业进行初始化,作业内的任务(TasklnProgress)被全部创建好,等待TaskTracker来请求任务,我们对任务的分析就从这里开始。

JobTracker为作业创建一个新的TasklnProgress任务;此时Task处在UNASSIGNED状态。

TaskTracker经过一个心跳周期后,向JobTracker发送一次心跳消息(heartbeat),请求分配任务,JobTracker收到请求后分配个TasklnProgress任务给TaskTracker。这是第一次心跳通信,心跳间隔一般为3秒。

TaskTracker收到任务后,创建一个对应的TaskTracker.TasklnProgress对象,并启动独立的Child进程去执行这个任务。此时TaskTracker已将任务状态更新为RUNNING。

又经过一个心跳周期,TaskTracker向JobTracker报告任务状态的改变,JobTracker也将任务状态更新为RUNNIN1G。这是第二次心跳通信。

经过一定时间,任务在Child进程内执行完成,Child进程向TaskTracker进程发出通知,任务状态变为COMMIT_PENDING(任务在执行期间TaskTracker还会周期性地向JobTracker发送心跳信息)。

TaskTracker再次向JobTracker发送心跳信息报告任务状态的改变,JobTracker收到消息后也将任务状态更新为COMMIT—PENDING,并返回确认消息,允许提交。

TaskTracker收到确认可以提交的消息后将结果提交,并把任务状态更新为SUCCEEDED。

一个心跳周期后TaskTracker再次发送心跳消息,JobTracker收到消息后也更新任务的状态为SUCCEEDED,一个任务至此结束。

关于大数据学习,MapReduce中作业与任务运行机制,以上就为大家做了详细的介绍了。MapReduce的作业与运行流程,建议大家结合到分布式集群环境当中去理解,这样更容易掌握。加米谷大数据,专业大数据培训机构,大数据开发,数据分析与挖掘,本月正在招生中,课程大纲及试学视频可联系客服获取!
热点排行
推荐文章
立即申请>>