mapreduce源码分析之HeartBeat机制

本文深入探讨了MapReduce中JobTracker与TaskTracker的心跳机制。当TaskTracker向JobTracker发送心跳,JobTracker会处理状态信息,响应启动/停止任务或作业的指令,并在应急情况下进行'重置'。接受新任务时,JobTracker使用任务调度器为TaskTracker分配任务,包括设置和清理任务,并通过HeartbeatResponse将任务行动返回给TaskTracker。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三.再次回到JobTracker看看心跳机制是怎么回复的,哈哈。。。

TaskTrackerheartbeat通过RPC发送到JobTracker时,会触发JobTrackerheartbeat()方法,具体见下面(我只是将流程分析了一下,其他的都是一些辅助类,以后慢慢看罗!):

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


/**

*Theperiodicheartbeatmechanismbetweenthe{@linkTaskTracker}and

*the{@linkJobTracker}.

*

*The{@linkJobTracker}processesthestatusinformationsentbythe

*{@linkTaskTracker}andrespondswithinstructionstostart/stop

*tasks or jobs, and also 'reset' instructions during contingencies.

*/

publicsynchronizedHeartbeatResponseheartbeat(TaskTrackerStatusstatus,

booleanrestarted,

booleaninitialContact,

booleanacceptNewTasks,

shortresponseId)

throwsIOException{

。。。

StringtrackerName = status.getTrackerName();

。。。

shortnewResponseId=(short)(responseId+1);

。。。

//Initializetheresponsetobesentfortheheartbeat

HeartbeatResponseresponse=newHeartbeatResponse(newResponseId,null);

List<TaskTrackerAction>actions

=newArrayList<TaskTrackerAction>();

//如果tasktracker向一个jobtracker请求一个task运行

if(acceptNewTasks){

TaskTrackerStatustaskTrackerStatus = getTaskTracker(trackerName);

if(taskTrackerStatus==null){

LOG.warn("Unknowntasktrackerpolling;ignoring:"+trackerName);

}else{

//setupCleanuptask优先级最搞,下面这个方法是returns//cleanuptasksfirst,thensetuptasks.

List<Task> tasks

=getSetupAndCleanupTasks(taskTrackerStatus);

if(tasks==null){

//采用默认的任务调度器分配任务

tasks= taskScheduler.assignTasks(taskTrackerStatus);

}

if(tasks!=null){

for(Tasktask:tasks){

//这个是将task放入一个队列中,该队列能监控该任务,如果完成之后长时间还存在就杀死它

expireLaunchingTasks.addNewTask(task.getTaskID());

LOG.debug(trackerName+"->LaunchTask:"+task.getTaskID());

//将任务放到Action列表里面,返回给TaskTracker

actions.add(newLaunchTaskAction(task));

}

}

}

}

。。。

//calculate next heartbeat interval and put in heartbeat response

intnextInterval=getNextHeartbeatInterval();

response.setHeartbeatInterval(nextInterval);

response.setActions(

actions.toArray(newTaskTrackerAction[actions.size()]));

。。。

returnresponse;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值