Hadoop的mapred TaskTracker端源码概览

http://jiwenke.iteye.com/blog/334146

花了许多功夫把Hadoop的mapreduce实现过了一遍,基本线索理清楚了: 
1. 任务的运行时TaskTracker通过heartbeat取得 
2. TaskTracker得到hearbeatresponse之后,会根据封装在response里的action来决定行为 
3. 如果是launchaction的话,调用TasklLauncher,在startNewTasks中的localizeJob调用launchTaskForJob然后再TaskInProgress中launchTask让runner.start(); - 这里面的startNewTasks是在线程中的run方法中,而TaskLauncher的notifyall会把线程唤醒:

Java代码 
  1.       
  2. public void addToTaskQueue(LaunchTaskAction action) {  
  3.       synchronized (tasksToLaunch) {  
  4.         TaskInProgress tip = registerTask(action, this);  
  5.         tasksToLaunch.add(tip);  
  6.         tasksToLaunch.notifyAll();  
  7.       }  
  8.     }  

而这个addToTaskQueue方法是在offerService中调用的,这样就整过过程就街上了:  
Java代码 
  1. if (action instanceof LaunchTaskAction) {  
  2.   addToTaskQueue((LaunchTaskAction)action);  
  3. else if (action instanceof CommitTaskAction)   

4. 这个时候就回到TaskRunner.run中去launchJVM,当然要把这个JVM的参数构造好,这个JVM就是我们看到map任务运行的JVM  
5. 然后JVMRunner会spawn JVM, 这是通过shexe Child这个类来实现的,这个Child的main就是新起的JVM的主函数入口  
6.在Child.main中会对任务的类型进行判断,调用相应的MapTask.run和ReduceTask.run  
7.这个时候就可以看到mapper.map入口啦,然后就开始执行用户定义的mapper!  

所以Child启动以后的log输出和前面TaskTracker的输出不在同一个文件里,因为已经不是一个虚拟机了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值