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<Cluster>() {
                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;
    }

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值