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),这样分配来的任务就运行起来了




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这里再提供几个 Python 类的名称,专门用于记录正在执行任务信息: 1. `TaskTracker`:表示一个任务追踪器,可以记录当前正在执行任务信息,并提供开始任务、结束任务、查询任务状态等方法。 2. `JobQueue`:表示一个作业队列,可以记录当前正在等待执行的作业信息,并提供添加作业、执行作业、查询作业状态等方法。 3. `TaskManager`:表示一个任务管理器,可以记录当前正在执行任务信息,并提供开始任务、结束任务、暂停任务、恢复任务、查询任务状态等方法。 4. `JobScheduler`:表示一个作业调度器,可以记录计划执行的作业信息,并按照指定的时间表执行作业。 5. `ProcessMonitor`:表示一个进程监控器,可以记录正在运行的进程信息,并提供查询进程状态、杀死进程等方法。 6. `WorkflowEngine`:表示一个工作流引擎,可以记录当前正在执行的工作流信息,并按照指定的流程执行工作流。 7. `TaskQueue`:表示一个任务队列,可以记录当前正在等待执行任务信息,并提供添加任务执行任务、查询任务状态等方法。 8. `BatchProcessor`:表示一个批处理器,可以记录正在处理的批量任务信息,并提供开始处理、暂停处理、恢复处理、查询处理状态等方法。 9. `RequestHandler`:表示一个请求处理器,可以记录正在处理的请求信息,并提供处理请求、查询请求状态等方法。 10. `CommandExecutor`:表示一个命令执行器,可以记录正在执行的命令信息,并提供执行命令、查询命令状态等方法。 希望这些类名能够对你有所帮助,祝你编写出优秀的任务管理系统!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值