MapReduce作业提交源码分析
来源:互联网 发布:手机加速软件排行 编辑:程序博客网 时间:2024/05/28 05:19
MapReduce作业提交源码分析
我们在编写MapReduce程序的时候,首先需要编写Map函数和Reduce函数。完成mapper和reducer的编写后,进行Job的配置;Job配置完成后,调用Job.submit()方法完成作业的提交。那我们思考一下,Job最终如何完成作业(job)的提交呢?粗略想一下,Job必然需要通过某种方式连接到JobTracker,因为只有这样才能将job提交到JobTracker上进行调度执行。还需要考虑一下,我们自己编写的mapper和reducer,即Jar文件如何传送到JobTracker上呢?其中有一种最简单也比较直观的方法,直接通过socket传输给JobTracker,由JobTracker再传输给TaskTracker(注意:MapReduce并没有采用这种方法)。第三个需要考虑的内容是,JobTracker如何将用户作业的配置转化成map task和reduce task。下面我们来分析一下MapReduce这些功能的实现。
首先在class Job内部通过JobClient完成作业的提交,最终由JobClient完成与JobTracker的交互功能。在JobClient的构造函数中,通过调用RPC完成与JobTracker连接的建立。
完成建立后,JobClient首先确定job相关文件的存放位置(我们上面提到mapreduce没有采用将jar即其他文件传输给JobTracker的方式,而是将这些文件保存到HDFS当中,并且可以根据用户的配置存放多份)。至于该存放目录的分配是通过调用RPC访问JobTracker的方法来进行分配的,下面看一下JobTracker的分配代码:
final Path stagingRootDir = new Path(conf.get(
"mapreduce.jobtracker.staging.root.dir",
"/tmp/hadoop/mapred/staging"));
final FileSystem fs = stagingRootDir.getFileSystem(conf);
return fs.makeQualified(new Path(stagingRootDir, user + "/.staging")).toString();
注意上面代码所生成的stagingRootDir是所有job文件的存放目录,是一个根目录,并不单指当前job。
完成job存放目录的分配后,JobClient向JobTracker申请一个JobID(通过RPC,注意基本上JobClient与JobTracker的所有通信都是通过RPC完成的,如果下文没有显示著名也应该属于这种情况)。
JobID jobId = jobSubmitClient.getNewJobId();
下面是JobTracker.getNewJobId的具体实现:
public synchronized JobID getNewJobId() throws IOException {
return new JobID(getTrackerIdentifier(), nextJobId++);
}
获得JobID后,将该JobID与上面的stagingRootDir组合就构成了Job文件的具体存放地址的构建。进行这些相关工作后,JobClient将相关的文件存储到HDFS当中。
- MapReduce作业提交源码分析
- Hadoop-2.7.3源码分析:MapReduce作业提交源码跟踪
- mapreduce源码分析作业提交、初始化、分配、计算过程之提交篇
- mapreduce提交job源码分析
- Hadoop-2.4.1源码分析--MapReduce作业(job)提交源码跟踪
- hadoop作业提交和MapReduce基础分析
- Job作业提交源码分析
- hadoop作业提交源码分析
- Hadoop作业提交源码分析
- mapreduce源码分析作业提交、初始化、分配、计算过程之初始化篇
- MapReduce源码分析之新API作业提交(二):连接集群
- mapreduce源码分析作业分配过程
- MapReduce 提交作业常见问题
- MapReduce作业提交过程
- MapReduce提交作业常见问题
- MapReduce提交作业常见问题
- MapReduce作业提交流程
- 源码剖析MapReduce作业提交机制(本地模式)
- C#操纵数据库简单记录
- Hive基础知识学习
- 11.用链表模拟大整数加法运算
- Len和lenB的区别
- .NET处理HTTP请求
- MapReduce作业提交源码分析
- UVA 442 Matrix Chain Multiplication
- Riak存储引擎bitcask与leveldb测试
- 在CENTOS 6 中安装最新版的firefox
- FileOpen 及相关文件读写
- POJ 1274-The Perfect Stall
- 外观模式(Facade)
- 声明指定了两个以上的数据类型
- C++explicit关键字