taskTracker请求任务执行任务的过程
2013-11-12 14:51
281 查看
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,
jvmManager.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),这样分配来的任务就运行起来了
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,
jvmManager.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),这样分配来的任务就运行起来了
相关文章推荐
- TaskTracker获取并执行map或reduce任务的过程(一)
- TaskTracker执行map或reduce任务的过程(二)
- TaskTracker获取并执行map或reduce任务的过程1
- TaskTracker执行map或reduce任务的过程2
- 第10周-任务0-构造和析构函数的执行过程实例解析
- 服务器定时执行计划任务(通过浏览器请求某个链接)
- hadoop中的一次集群任务执行超时问题查找过程
- MapReduce任务执行过程研究之Collect过程
- 第10周-任务0-构造和析构函数的执行过程实例解析
- Executor框架线程池任务执行全过程原理
- Map任务执行过程分析
- Cts框架解析(14)-任务执行过程
- 一次请求中,经过 nginx+uWSGI+flask应用程序搭建服务的执行过程
- Cts框架解析-任务执行过程
- SpringMvc + Quarzt 动态执行任务实现过程
- hadoop任务执行过程中函数的调用层次
- 已超过了锁请求超时时段” 直接把下在面的存储过程 放到你的Master数据库执行一下就可以了
- hadoop中的一次集群任务执行超时问题查找过程
- 戏(细)说Executor框架线程池任务执行全过程(上)
- 戏(细)说Executor框架线程池任务执行全过程(下)