2.4 JobTracker和TaskTracker
如上面所述,JobTracker和TaskTracker是MapReduce框架最基本的两个服务,其他所有处理均由它们调度执行,下面简单介绍它们内部提供的服务及创建的线程,详细过程下回分解J
2.4.1 JobTracker的服务和线程
JobTracker是MapReduce框架中最主要的类之一,所有job的执行都由它来调度,而且hadoop系统中只配置一个 JobTracker应用。启动JobTracker后它会初始化若干个服务以及若干个内部线程用来维护job的执行过程和结果。下面简单介绍一下它们。
首先,JobTracker会启动一个interTrackerServer,端口配置在Configuration中 的"mapred.job.tracker"参数,缺省是绑定8012端口。它有两个用途,一是用于接收和处理TaskTracker的 heartbeat等请求,即必须实现InterTrackerProtocol接口及协议。二是用于接收和处理JobClient的请求,如 submitJob,killJob等,即必须实现JobSubmissionProtocol接口及协议。
其次,它会启动一个infoServer,运行StatusHttpServer,缺省监听50030端口。是一个web服务,用于给用户提供web界面查询job执行状况的服务。
JobTracker还会启动多个线程,ExpireLaunchingTasks线程用于停止那些未在超时时间内报告进度的Tasks。 ExpireTrackers线程用于停止那些可能已经当掉的TaskTracker,即长时间未报告的TaskTracker将不会再分配新的 Task。RetireJobs线程用于清除那些已经完成很长时间还存在队列里的jobs。JobInitThread线程用于初始化job,这在前面章 节已经介绍。TaskCommitQueue线程用于调度Task的那些所有与FileSystem操作相关的处理,并记录Task的状态等信息。
2.4.2 TaskTracker的服务和线程
TaskTracker也是MapReduce框架中最主要的类之一,它运行于每一台DataNode节点上,用于调度Task的实际运行工作。它内部也会启动一些服务和线程。
TaskTracker也会启动一个StatusHttpServer服务来提供web界面的查询Task执行状态的工具。
其次,它还会启动一个taskReportServer服务,这个用于提供给它的子进程即TaskRunner启动的MapTask或者 ReduceTask向它报告状况,子进程的启动命令实现在TaskTracker$Child类中,由TaskRunner.run()通过命令行参数 传入该服务地址和端口,即调用TaskTracker的getTaskTrackerReportAddress(),这个地址会在 taskReportServer服务创建时获得。
TaskTracker也会启动一个MapEventsFetcherThread线程用于获取Map任务的输出数据信息。
