MapReduce源码初探

1.入口

在下面的作业提交入口中点入:

boolean result = job.waitForCompletion(true);
if (this.state == Job.JobState.DEFINE) {
            this.submit();
        }

确认状态后提交,这便是debug时的代码入口

2.状态

进入后由方法名称可知是确认任务的状态,状态是enmu类型,但为什么要确认,状态为何异常却不清楚,而且进入submit()之前经过了一次判断,什么会导致刚判断成功进入状态便改变了呢?

this.ensureState(Job.JobState.DEFINE);

3.兼容

进去看了看,从内容和方法名称判断应该是兼容过去的版本,先不关心

this.setUseNewAPI();

4.连接

说是连接,是由于方法名为connect()

this.connect();
if (this.cluster == null) {
            this.cluster = (Cluster)this.ugi.doAs(new PrivilegedExceptionAction() {
                public Cluster run() throws IOException, InterruptedException, ClassNotFoundException {
                    return new Cluster(Job.this.getConfiguration());
                }
            });
        }

好吧,说是连接,其实应当是根据配置信息,来配置启动集群了,有意思的是,configuration原来就是那堆xml文件。

5.submitter

由于在mapper和下一行代码都打了断点,直接飞断点并没有飞到Mapper代码,说明这一行并不是业务实现核心逻辑,那么核心应当在下一句。

final JobSubmitter submitter = this.getJobSubmitter(this.cluster.getFileSystem(), this.cluster.getClient());

参数调用了两个方法一个创建并返回了一个fs对象,另一个返回client,进入多层发现:

JobSubmitter(FileSystem submitFs, ClientProtocol submitClient) throws IOException {
        this.submitClient = submitClient;
        this.jtFs = submitFs;
    }

那么这一行应当只是设置了作业的提交“容器”,设置了客户端信息和文件系统信息,接下来的应当才是重点。

你可能感兴趣的:(mapreduce,大数据)