taskTracker请求任务执行任务的过程

1.此次仅说明一个task任务的执行流程
task是由taskTracker负责执行的,在taskTracker中,有两个控件: TaskLauncher。一个 TaskLauncher为map的 TaskLauncher,一个为reduce的 TaskLauncher。这两个控件在taskTrack初始化的时候也初始化。 TaskLauncher内部有一个 tasksToLaunch的队列,这个队列是放置要执行任务的。 TaskLauncher是一个线程,其内部会一直检查 tasksToLaunch 队列是否为空,不为空的话就立马从立马取出一个task进行执行,整个的执行就在这个run方法里面,一直到执行的liunx的shell里
TaskLauncher.run() -->  startNewTask(tip);---> launchTaskForJob(tip,  new  JobConf(rjob.getJobConf()), rjob); ---> tip.launchTask(rjob);---> this .runner.start(); ( TaskRunner )  --->  launchJvmAndWait(setupCmds, vargs, stdout, stderr, logSize, workDir); --->  jvmManager .launchJvm(this, j vmManager .constructJvmEnv(setup, vargs, stdout, stderr, logSize, workDir,  conf )); --->  mapJvmManager .reapJvm(t, env); 或  reduceJvmManager .reapJvm(t, env); ---》  spawnNewJvm(jobId, env, t); ---》  jvmRunner.start(); --》 ....


2.那好,我们已经知道taskTracker执行task其实是 TaskLauncher运行期内部的task进而执行的,那么这写task是从什么地方获取来的呢? 其实通过和jobTracker进行心跳的时候获取来的


首先taskTracker启动的时候调用main,main调用其run方法,run方法调用 offerService () 方法

在taskTracker里的 offerService() 方法中会持续的和jobTracker保存心跳 HeartbeatResponse heartbeatResponse =  transmitHeartBeat (now);,并从心跳中获取任务action   TaskTrackerAction[]  actions  = heartbeatResponse.getActions();当action为    if  (action  instanceof  LaunchTaskAction) {  时会   addToTaskQueue((LaunchTaskAction)action);将其加入到lanuncer的任务队列中去
 if (action.getTask().isMapTask()) {
      mapLauncher.addToTaskQueue(action);
    } else {
      reduceLauncher.addToTaskQueue(action);
    }
而对应的这两个队列都在启动监听队列是否有任务,有任务就运行 (看 1),这样分配来的任务就运行起来了




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值