MapReduce源代码研究1


      今天自己研究hadoop MapReduce 代码,写出来方面以后查阅吧。我研究源代码从main()方法的waitForCompletion()开始研究。

     waitForCompletion()主要作用是Submit the job to the cluster and wait for it to finish.job的运行状态有如下几种方式:

  1.   NEW
  2.   INITED,
  3.   RUNNING,
  4.   SUCCEEDED,
  5.   FAILED,
  6.   KILLED,
  7.   ERROR
      判断完job状态后将提交任务给集群。 submit()负责提交任务给集群,我们主要详细分析submit()方法实现过程。
  1.    判断job状态;
  2.    使用新的API兼容前面的MapReduce API;
  3.    链接集群 使用connect()方法;
  4.    生成一个submitter对象,负责提交job任务;
  5.    调用submitter的内部方法submitJobInternal提交任务;
  6.  调用submitter的内部方法submitJobInternal提交任务;
  7.           submitJobInternal主要实现了如下功能:
    •         检查输入输出规格;
    • 计算输入分块信息;
    •         设置分发任务的用户信息;
    • 拷贝job的jar、配置信息到mapreduce的目录(在hdfs上面);
    •         提交任务给job 给jobtracker并监控他们的状态;

  8. 提交任务是使用的submitClient,中的submitJob,需要三个参数:jobiD,submitJobDir,Credentials(安全认证方法);调用YARNRunner类下的submitJob()函数,提交Job,传出相应的所需参数(例如 JobID等)。
  9. ClientProtocol 是客户端与jobtracker的通信协议;
  10. 提交任务完成
YARNRunner  任务提交代码如下:  
  @Override
  public JobStatus submitJob(JobID jobId, String jobSubmitDir, Credentials ts)
  throws IOException, InterruptedException {
    
    addHistoryToken(ts);
    
    // Construct necessary information to start the MR AM
    ApplicationSubmissionContext appContext =
      createApplicationSubmissionContext(conf, jobSubmitDir, ts);

    // Submit to ResourceManager
    try {
      ApplicationId applicationId =
          resMgrDelegate.submitApplication(appContext);

      ApplicationReport appMaster = resMgrDelegate
          .getApplicationReport(applicationId);
      String diagnostics =
          (appMaster == null ?
              "application report is null" : appMaster.getDiagnostics());
      if (appMaster == null
          || appMaster.getYarnApplicationState() == YarnApplicationState.FAILED
          || appMaster.getYarnApplicationState() == YarnApplicationState.KILLED) {
        throw new IOException("Failed to run job : " +
            diagnostics);
      }
      return clientCache.getClient(jobId).getJobStatus(jobId);
    } catch (YarnException e) {
      throw new IOException(e);
    }
  }
  • 设置必要的配置信息,初始化Application上下文信息,其中上下文信息中包括MRAppMaster所需要的资源,执行MRAppMaster的命令得等。
  • 然后调用ResourceMgrDelegate的submitApplication()方法,同时传入Application上下文信息,提交Job到ResourceManager,函数执行最后返回已生成的ApplicationId(实际生成JobID的时候ApplicationId就已经生成)。
  • 最后返回Job此时的状态,函数退出



需要继续了解split和RPC通信协议。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值