1. 第1步初始话文件系统localStorage,本地文件路径是通过mapred.local.dir配置,默认在 /tmp/hadoop-${user.name}/mapred/local目录下,并在该目录下创建taskTracker,ttprivate,tt_log_tmp,userlogs目录,用于存放运行Task的文件。除了userlogs目录如果不存在则创建目录外,其它目录都是在启动的时候先删后建。
2. 第2步初始化JvmManager,运行Map和Reduce任务是在独立的Jvm下运行,JvmManager是用于启动和管理Jvm。
3. 第3步初始化授权管理,从conf/hadoop-policy.xml读取配置的授权管理信息,指定各种远程访问接口所允许的用户和用户组,默认情况下所有用户都能访问。
4. 第4步启动Report Rpcserver,提供rpc接口供访问TaskTracker上执行任务的信息,通过配置文件中“mapred.task.tracker.report.bindAddress”,“mapred.task.tracker.report.port” ,“mapred.task.tracker.report.address”指定绑定的ip地址和端口号,如果不指定则默认为127.0.0.1:45543。
5. 第5步初始化文件系统缓存管理,用于TaskTracker向HDFS获取,下载文件到本地,并且访问的文件做并行控制,防止并行操作。
6. 第6步启动Map事件查询线程,定期(heartbeat的间隔)向JobTracker查询分配于该TaskTracker上的Reduce任务对应的Map任务的执行结果事件,如果Map已经完成则可以向执行Map的TaskTracker获取执行Map任务的结果。
7. 第7步应用内存管理,默认情况下不应用内存管理。如果需要使用可以通过配置mapred.cluster.map.memory.mb和mapred.cluster.reduce.memory.mb每个map和reduce任务可以使用的内存,使用的总内存再乘上mapSlot和reduceSlot的个数(默认情况下mapSlot和reduceSlot个数为2,默认一个Task占用1个slot,也就是一个TaskTracker可以同时运行2个Map Task和2个Reduce Task)。还可以通过配置mapred.job.reduce.memory.mb和mapred.job.map.memory.mb Map和Reduce单个任务的最大内存使用。如果运行的单个Map或者Reduce任务超过指定的内存,则把该任务清除掉。如果运行的任务总的内存大于所设置的总内存,则从进度较慢的任务开始清除,直到内存在允许的范围内。
8. 第8步启动Map和Reduce的Launch线程,用于Map和Reduce任务的启动。
9. 第9步,如果在文件中配置了mapred.healthChecker.script.path脚本,则定期执行脚本进行健康检查。
10.第10步启动HttpServer,通过配置文件tasktracker.http.bindAddress,tasktracker.http.port,mapred.task.tracker.http.address指定需要绑定的ip地址和端口号,默认为0.0.0.0:50060。由于Jetty存在一个bug,SelectChannel对cpu占用率达到100%,因此启动一个定时查看线程,通过JMX查找Jetty SelectChannel的线程cpu使用时间,计算cpu的使用率,如果超过90%则推出TaskTracker进程。
11.第11.1步启动日志管理线程,每个一个小时执行一次,删除已经完成Job的日志文件。
12.第11.2步启动Job清除线程,对完成的Job进行清除。
13.第11.3步定期向JobTracker获取任务执行。