MapReduce(九): 任务的运行

任务是由TaskTracker启动与本身隔离的JVM运行,所有任务的运行主类是Child,主类先初始化任务的路径,log参数后,然后根据不同的任务类型执行不同的操作。

TaskTracker在启动Child时传入的参数可见taskjvm.sh。启动时为Task初始化目录,task的目录在TaskTracker初始化的Job目录的下一级,为:/tmp/hadoop-<user>/mapred/local/taskTracker/<user>/jobcache/<jobID>/<taskId>,然后把TaskTacker在Job dir创建的job.xml拷贝到Task dir,因为child会添加一些该任务特有的参数到job.xml中。在Task dir下再创建Task work dir和Task tmp dir,目录名分别为work和tmp,作为task在运行任务时工作目录和临时目录用。

初始化完毕后,根据任务的类型分别启动setup,cleanup,Map或者Reduce任务。Child启动Map任务的类图如下


Child根据任务的类型启动对应的MapTask任务还是ReduceTask,MapTask/ReduceTask再去加载由开发人员通过配置文件”mapred.map.runner.class”设置的任务执行类,默认为MapRunner类,开发人员必须要提供对Mapper类的实现用于完成Map业务的操作。Reduce的启动过程与Map的启动过程类似。Map任务通过配置” mapred.input.format.class”指定数据源读取的格式,默认实现为TextInputFormat类,该类还提供对数据源进行split的实现。通过设置” mapred.output.format.class”指定处理结果输出格式,默认实现为TextOutputFormat,key,value按照String格式输出到文件。

1  Setup

执行Job前第一步先执行Job Setup任务,Job Setup主要是执行一些Job的初始化工作,比如创建Job的output目录等。因此它可以按照Map,也可以按照Reduce类型任务执行。

2  Task Cleanup

主要是执行该Task的临时目录的清理等工作,比如清理该Job在hdfs output下的Task临时目录。Task Cleanup任务同样也可以按照Map和Reduce类型执行。

3  Job Cleanup

如果该Job执行成功,则在hdfs的output目录下,创建执行成功的标识文件。如果失败则删除output目录下的各个Task的临时目录。

无论执行成功还是失败,都执行删除该Job在Hdfs上的工作目录,默认为hdfs uri+根目录+user+"/.staging"

4. Map

   Map任务的执行较复杂,后续单独章节说明并源代码分析。

5. Reduce

  Reduce任务的执行较复杂,后续单独章节说明并源代码分析。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值