【hadoop】map reduce任务提交后系统干嘛了
2012-09-08 20:51
417 查看
1、 文件上传
DFSClient向JobTracker提交任务之前,会将任务运行所需要的文件放入HDFS,从而可被JobTracker和TaskTracker得到:一般有执行文件,配置文件,input数据等当Map-Reduce程序停在JobTracker.submitJob函数中的时候,让我们查看HDFS中有如下的变化:
bin/hadoop fs -ls /data/hadoopdir/tmp/mapred/system
其中多了一个文件夹job_201011202025_0001,这是当前运行的Job的ID,在这个文件夹中有我们传上去的文件。(路径可以设置,这个路径是用来保存客户端传上来的临时文件的)
jobtracker根据用户提交的信息,得到jobid,用户组及判断权限,另外将job的信息写到hdfs上,以便tasktracker能够访问。
2、 任务拆分
在JobTracker.submitJob的函数中,会读取这些上传到HDFS的文件,从而将Job拆分成Map Task和Reduce Task。然后再调用addJob()方法,方法中会将job加入到jobs队列中,job队列采用了map数据结构,
Map<JobID,JobInProgress> jobs = new TreeMap<JobID, JobInProgress>();
可以很方便的通过jobid找到该job相应的JobInProgress对象。同时也会加入到JobInProgressListener类中,此类主要是用来监听job的类。完成后,最后将返回job的状态。
当 TaskTracker通过heartbeat向JobTracker请求一个Map Task或者Reduce Task来运行。
3、 任务本地化
tasktracker开始去获取一个task,获取task是通过FairScheduler实现的。FairScheduler是hadoop中的作业公平调度器,主要是解决当TT发送心跳告诉JT当前的空闲slots时,希望JT分配给TT相应多个task,让TT去执行这些task。所以JT就需要一个调度器来对作业进行调度,选择出作业,然后将作业的task分配TT去执行。而hadoop中的task可以分为map,reduce,jobsetup,jobcleanup,taskcleanup这五种task。更多细节请参见:FairScheduler(公平调度器)的源码阅读当TaskTracker得到一个Task的时候,它会调用TaskTracker.localizeJob将job运行的三个文件从HDFS中拷贝到本地文件夹,然后调用TaskInProgress.localizeTask创建Task运行的本地工作目录。
程序停在做完localizeTask后,tasktracker上的/data/hadoopdir/tmp/mapred/local/taskTracker/jobcache下多了一个文件夹job_201011202025_0001
4、 执行
接下来要创建Child JVM来执行Task5、 reduce
Reduce Task包括三个过程:copy,sort,reduce拷贝过程即将所有的map结果复制到reduce task的本地
在拷贝的过程中,有一个背后的线程会对已经拷贝到本地的map.out进行预先的合并,形成map.merged文件,合并的规则是按照 io.sort.factor来进行合并,对于我们的配置就是两两合并,下面我们看到的就是map_2.out和map_3.out合并成 map_3.out.merged,在另外两个还没有合并的时候,拷贝过程结束了,则背后的合并进程也就结束了。
reduce的过程就是循环调用reducer的reduce函数,将结果输出到HDFS中。
相关文章推荐
- Hadoop 学习笔记七 任务远程提交--Eclipse插件
- Hadoop - 任务调度系统比较
- Hadoop2.*源码分析之Job任务提交与执行
- eclipse中hadoop2.3.0环境部署及在eclipse中直接提交mapreduce任务
- Hadoop任务提交过程
- Hadoop学习——向MapReduce提交计算任务的基本流程
- Hadoop 学习笔记八 任务远程提交--Java远程提交
- hadoop job -kill 与 yarn application -kii(作业卡了或作业重复提交或MapReduce任务运行到running job卡住)
- eclipse中hadoop2.3.0环境部署及在eclipse中直接提交mapreduce任务
- Hadoop map reduce 任务数量优化
- 【Hadoop代码笔记】Hadoop作业提交之Child启动map任务
- 【R】大型机Linux系统安装R及bsub提交R任务
- 3.第三单元任务二实训:使用作业提交系统提交Java作业时 ,需要输入Java源代码文件名和自己的邮箱,提交前对Java文件名以及邮箱进行有效检查。编写程序实现对输入的Java源文件名以及邮箱有效性的
- 【Hadoop】提交任务时 java.net.ConnectException: 拒绝连接
- Hadoop - 任务调度系统比较
- 【hadoop】 3003-mapreduce任务的提交
- Cloudera集群中提交Spark任务出现java.lang.NoSuchMethodError: org.apache.hadoop.hbase.HTableDescriptor.addFamily错误解决
- spark调度系列------3. RDD依赖的建立以及RDD依赖在任务提交到调度系统的作用
- hadoop 提交任务总是挂起状态
- hadoop-2.5.2本地测试环境下(利用java多线程模拟),提交MapReduce任务时出现的错误及解决办法