MapReduce(六): 向JobTracker提交任务
2014-09-02 12:04
411 查看
1. 在提交任务之前,可以通过GenericOptionsParser,把命令行中的参数设置到JobConf中,涉及到的命令行参数有:-fs,-jt,-conf(指定xml参数文件),-libjars(指定执行任务的jar包),-files(指定该任务可能用到的文件),-archives(指定该任务可能用到的资源),tokenCacheFile(指定登陆的口令文件)。
2. 1.1 JobTracker向hdfs server获取hdfs server上的本地临时staging根目录,用户目录为hdfs uri+根目录+user+"/.staging",这里的用户为启动JobTracker的用户。获取的目录例如:hdfs://192.168.74.103:9000/tmp/hadoop/mapred/staging/jack/.staging
3. 1.3 设置的目录为staging dir + jobId
4. 1.4 如果配置了Kerberos验证,则从“mapreduce.job.credentials.binary”配置的本地二进制文件中获取Token和SecurityKey,从“mapreduce.job.credentials.json”配置的JSON文件中获取SecurityKey。
5. 1.5 上传通过命令行参数”files”,”archives”,”libjars”(也可以通过代码设置配置参数”tmpfiles”,”tmparchives”,”tmpjars”)设置的Job files,archives,jars,到hdfs server上,三个目录分别为staging dir+jobid+files,staging dir+jobid+archives,staging
dir+jobid+libjars。上传好后的路径添加到JobConf环境变量中,分别对应:”mapred.cache.files”,” mapred.job.classpath.archives”。然后对”mapred.jar”中配置的本地路径上的运行jar包,提交到hdfs上并更改名字为job.jar,提交到hdfs的文件路径为staging dir
+ jobid+job.jar
6. 1.6 检查设置的Job输出目录在dfs文件系统上不存在
7. 1.7 见《深入浅出hadoop》文件分割算法。
8. 把以上所设置的环境变量以及默认环境变量写到staging dir+jobid+job.xml。
9. 1.9.3 如果是首次执行任务,则把任务的ID,任务的staging dir+jobid路径,任务所属用户写到hdfs文件系统上所配置的"mapred.system.dir"路径下以jobid为子目录的文件job-info,"mapred.system.dir"的默认路径为/tmp/hadoop/mapred/system,目录例如:hdfs://192.168.74.103:9000/tmp/hadoop/mapred/system/<jobid>/job-info,用于在系统异常之后对未完成的任务重新提交运行完成。在该Job完成时,由JobTracker在garbageCollect阶段清除该目录。
10. 1.9.5 添加job到队列中,然后另启线程开始初始化运行该job
11. 2.1.2 根据jobid生成token,Token的key名称为"ShuffleAndJobToken",添加原有的credentials中(有1.4中生成的credentials),然后把所有的credentials写入到hdfs文件系统上所配置的"mapred.system.dir"路径下以jobid为子目录的文件jobToken,例如:hdfs://192.168.74.103:9000/tmp/hadoop/mapred/system/<jobid>/jobToken
12. 2.1.3 文件分割信息
13. 2.1.4 生成map任务信息,每个split一个map任务。生成reduce任务信息,默认配置一个任务,可以通过"mapred.reduce.tasks"参数设置reduce任务个数。生成cleanup和setup任务。
14. 1.11删除该Job的staging dir + jobId目录
注:一个任务在在执行过程中在hdfs上会主要创建两个目录,分别是,hdfs://192.168.74.103:9000/tmp/hadoop/mapred/staging/jack/.staging/<jobId>和hdfs://192.168.74.103:9000/tmp/hadoop/mapred/system/<jobid>,前者用于存储该任务的详细信息,运行程序和资源文件等,在Job完成后由提交Job执行的用户负责删除;后者存储该任务的用户信息和Token,Job完成后JobTracker负责对该目录清除(RecoverManager在JobTracker启动时扫描该目录下文件,如果存在则对该Job进行重新提交给JobTracker进行执行)。
相关文章推荐
- MapReduce任务Namenode DataNode Jobtracker Tasktracker之间的关系
- 通过Java程序提交通用Mapreduce任务并获取Job信息
- mapreduce的任务切片规划机制、job提交流程、Mapreduce中的分区Partitioner与流量汇总程序开发
- 图说MapReduce源码--JobTracker.getSetupAndCleanupTasks 任务选择顺序
- Hadoop学习笔记,MapReduce任务Namenode DataNode Jobtracker Tasktracker之间的关系
- Hadoop学习笔记(老版本,YARN之前),MapReduce任务Namenode DataNode Jobtracker Tasktracker之间的关系
- MapReduce执行过程源码分析(一)——Job任务的提交
- Hadoop学习笔记:MapReduce任务Namenode DataNode Jobtracker Tasktracker之间的关系
- hadoop job -kill 与 yarn application -kii(作业卡了或作业重复提交或MapReduce任务运行到running job卡住)
- MapReduce源码解读系列之——作业如何提交到JobTracker
- 在使用windows调用Hadoop 错误 /bin/bash: line 0: fg: no job control一般解决方法[将windows中的任务提交到linux中出错]
- mapreduce源码分析之JobTracker
- JobTracker任务调度器之JobQueueTaskScheduler
- MapReduce剖析笔记之六:TaskTracker初始化任务并启动JVM过程
- MapReduce源码分析之Eclipse中的代码如何提交给JobTracker
- (17)mapreduce 提交任务两种方式
- MapReduce: JobTracker默认task scheduling策略
- 代码如何提交到JobTracker的?
- Hadoop运行任务时一直卡在: INFO mapreduce.Job: Running job
- mapreduce中jobtracker进程的分析