从main方法开始跟踪
1 main
main的关键代码有两句,创建了实例并调用offerService方法。
JobTracker tracker = startTracker(new JobConf());
tracker.offerService();
2 startTracker
main方法中的startTracker调用了它的一个重载函数,该函数的主要代码为
result = new JobTracker(conf, identifier);
result.taskScheduler.setTaskTrackerManager(result);
3 构造函数
构造函数创建一个初始化taskScheduler,infoServer,interTrackerServer等重要成员
4 offerService
main函数创建JobTracker实例之后调用offerService函数,它的主要功能是启动taskScheduler,interTrackerServer,以及诸多后台线程
public void offerService() throws InterruptedException, IOException {
// Prepare for recovery. This is done irrespective of the status of restart
// flag.
while (true) {
try {
recoveryManager.updateRestartCount();
break;
} catch (IOException ioe) {
LOG.warn("Failed to initialize recovery manager. ", ioe);
// wait for some time
Thread.sleep(FS_ACCESS_RETRY_PERIOD);
LOG.warn("Retrying...");
}
}
taskScheduler.start();
// Start the recovery after starting the scheduler
try {
recoveryManager.recover();
} catch (Throwable t) {
LOG.warn("Recovery manager crashed! Ignoring.", t);
}
this.expireTrackersThread = new Thread(this.expireTrackers,
"expireTrackers");
this.expireTrackersThread.start();
this.retireJobsThread = new Thread(this.retireJobs, "retireJobs");
this.retireJobsThread.start();
expireLaunchingTaskThread.start();
if (completedJobStatusStore.isActive()) {
completedJobsStoreThread = new Thread(completedJobStatusStore,
"completedjobsStore-housekeeper");
completedJobsStoreThread.start();
}
// start the inter-tracker server once the jt is ready
this.interTrackerServer.start();
synchronized (this) {
state = State.RUNNING;
}
LOG.info("Starting RUNNING");
this.interTrackerServer.join();
LOG.info("Stopped interTrackerServer");
}