jobtracker自身启动与FIFO 调度器的工作过程
- jobtracker自身的main函数如下:
-
1 public static void main(String argv[] 2 ) throws IOException, InterruptedException { 3 StringUtils.startupShutdownMessage(JobTracker.class, argv, LOG); 4 5 try { 6 if(argv.length == 0) { 7 JobTracker tracker = startTracker(new JobConf()); 8 tracker.offerService(); 9 } 10 else { 11 if ("-dumpConfiguration".equals(argv[0]) && argv.length == 1) { 12 dumpConfiguration(new PrintWriter(System.out)); 13 } 14 else { 15 System.out.println("usage: JobTracker [-dumpConfiguration]"); 16 System.exit(-1); 17 } 18 } 19 } catch (Throwable e) { 20 LOG.fatal(StringUtils.stringifyException(e)); 21 System.exit(-1); 22 } 23 }
tracker.offerService();
result.taskScheduler.setTaskTrackerManager(result);
super.start();
taskTrackerManager.addJobInProgressListener(jobQueueJobInProgressListener);//将JobQueueJobInProgressListener加入到jobTracker中的jobInProgressListeners,taskTrackerManager在JobTracker的刚创建的时候就已经设置成jobTracker了,该行就是把实现了JobInProgressListener类的jobQueueJobInProgressListener加入到jobInProgressListeners中,而JobInProgressListener中有一个Map<JobSchedulingInfo, JobInProgress> jobQueue变量,用以存储所有的作业。因为jobQueueJobInProgressListener是被实例化了的,所有存在,实例化是在新建jobTracker对象时设置taskScheduler中完成。语句在jobQueueTaskScheduler的构造函数中:
this.jobQueueJobInProgressListener = new JobQueueJobInProgressListener();
}
eagerTaskInitializationListener.setTaskTrackerManager(taskTrackerManager);
eagerTaskInitializationListener.start();
taskTrackerManager.addJobInProgressListener(
eagerTaskInitializationListener); }
-
//eagerTaskInitializationListener实例化,在QueueTaskScheduler中的Setconf()对象中
1 public synchronized void setConf(Configuration conf) { 2 super.setConf(conf); 3 padFraction = conf.getFloat("mapred.jobtracker.taskalloc.capacitypad", 4 0.01f); 5 this.eagerTaskInitializationListener = 6 new EagerTaskInitializationListener(conf); 7 }