mapreduce源码分析之TaskTracker接受HeartbeatResponse

五.TaskTracker接受HeartbeatResponse

TaskTracker根据HeartbeatResponse的返回内容调用addToTaskQueue方法

-------------------------------------------------

privatevoidaddToTaskQueue(LaunchTaskActionaction){

if(action.getTask().isMapTask()){

mapLauncher.addToTaskQueue(action);

}else{

reduceLauncher.addToTaskQueue(action);

}

}

如果是maptask就用mapLauncher,如果是reducetask就用reduceLauncher,他们都是TaskLauncher对象,TaskLauncherTaskTracker的内部类,所以调用这个内部类的addToTaskQueue方法,而且他是一个线程类,在TaskTracker初始化的时候就调用了他的run方法

-----------------------------------------------------------------

publicvoidrun(){

。。。

startNewTask(tip);

。。。

}

-----------------------------------------------------------------

startNewTask方法如下:它里面调用了localizeJob方法

-----------------------------------------------------------------


/**

*Start a new task

*/

privatevoidstartNewTask(TaskInProgresstip){

localizeJob(tip);

}

-----------------------------------------------------------------

来看看localizeJob()方法:


-----------------------------------------------------------------


//进行task的初始化,将task所需要的数据等从HDFS上加载到本地,最后调用//launchTaskForJob方法,它又是调用了TaskInProgress类的一个方法//launchTask();该方法创建并启动了runner,他是TaskRunner的对象,TaskRunner是一//个线程类,可以查看它的run()方法

privatevoidlocalizeJob(TaskInProgresstip)throwsIOException{

PathlocalJarFile=null;

Task t = tip.getTask();

JobIDjobId=t.getJobID();

PathjobFile=newPath(t.getJobFile());

。。。。

。。。。

。。。。

launchTaskForJob(tip,newJobConf(rjob.jobConf));

}

launchTask代码如下:

-----------------------------------------------------------------

/**

*Kick off the task execution

*创建并启动了runner,他是TaskRunner的对象,TaskRunner是一个线程类,

*可以查看它的run()方法

*/

publicsynchronized void launchTask() throws IOException {

。。。。

。。。。

this.runner= task.createRunner(TaskTracker.this, this);

this.runner.start();

this.taskStatus.setStartTime(System.currentTimeMillis());

。。。

}

-----------------------------------------------------------------


TaskRunner是一个线程类,它能够runsataskinaseparateprocess. Tasksareruninaseparateprocessinordertoisolatethemap/reducesystemcodefrombugsinusersuppliedmapandreducefunctions.

???????????????????????????????????????????????????????晕??????????????????????

???????????????????????????????????????

之后再看。。。。。。。。


总之是最后通过jvmManager.launchJvm方法,然后一系列的方法(可以查看源码了解之,像reapJvmspawnNewJvm开启JvmRunner线程,继而调用runChild方法,最后调用到Child类)初始化了一个JVM等,最后调用Child类里面的task.run开始runthetask,调用了Task抽象类的run方法,实际上它是根据不同的taskmaptaskorreducetask)来调用MapTask或者是ReduceTask里面的run方法,见下节内容。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值