- TaskRunner类的位置:package org.apache.hadoop.yarn.sls.appmaster;
- 访问权限和继承关系:public abstract class AMSimulator extends TaskRunner.Task{},由于AMSimulator 继承于TaskRunner.Task。那么我们回顾一下TaskRunner.Task这个类(详细的请看我上一篇文章):
- AMSimulator类概览
- 分析:由于AMSimulator 继承于TaskRunner.Task,而TaskRunner.Task实现了runnable接口,因此在调用线程的start()方法之后就会执行TaskRunner.Task的run()方法。
@Override
public final void run() {
try {
if (nextRun == startTime) {
firstStep();
nextRun += repeatInterval;
if (nextRun <= endTime) {
queue.add(this);
}
} else if (nextRun < endTime) {
middleStep();
nextRun += repeatInterval;
queue.add(this);
} else {
lastStep();
}
} catch (Exception e) {
e.printStackTrace();
Thread.getDefaultUncaughtExceptionHandler()
.uncaughtException(Thread.currentThread(), e);
}
}
回到SlsRunner类中,start()方法依次调用了RMSimulator、NMSimulator、AMSimulator类的run()。那么其中AMSimulator的run()方法干了什么事情呢?
依次看该类的firstStep(),middleStep(),lastStep()方法都干了什么:
1.firstStep():和RM注册:提交新的应用+注册AM+跟踪应用程序指标
2. middleStep():处理队列中的相应+发送container请求+检查是否完成
3.lastStep():注销跟踪+注销AM+记录作业运行信息