`

hadoop 源码分析(二) jobClient 通过RPC 代理提交作业到JobTracker

阅读更多

1.JobClient 客户端类 通过调用 JobSubmissionProtocol 接口 的 submit 方法提交作业
2. JobSubmissionProtocol  接口为 JobClient 和JobTracker 共同执行的接口,因此它是一个可代理的接口
3. 调用 createRPCProxy() 通过远程RPC 调用实现动态代理 JobTracker 类的 submitJob 方法

 private static JobSubmissionProtocol createRPCProxy(InetSocketAddress addr,
      Configuration conf) throws IOException {
    return (JobSubmissionProtocol)[color=red][size=medium] RPC.getProxy[/size][/color](JobSubmissionProtocol.class,
        JobSubmissionProtocol.versionID, addr, 
        UserGroupInformation.getCurrentUser(), conf,
        NetUtils.getSocketFactory(conf, JobSubmissionProtocol.class));
  }


打开RPC 类 的 getProxy 方法

public static VersionedProtocol getProxy(
      Class<? extends VersionedProtocol> protocol,
      long clientVersion, InetSocketAddress addr, UserGroupInformation ticket,
      Configuration conf, SocketFactory factory, int rpcTimeout) throws IOException {

    if (UserGroupInformation.isSecurityEnabled()) {
      SaslRpcServer.init(conf);
    }
    VersionedProtocol proxy =
        (VersionedProtocol)[color=red][size=medium] Proxy.newProxyInstance[/size][/color](
            protocol.getClassLoader(), new Class[] { protocol },
            new Invoker(protocol, addr, ticket, conf, factory, rpcTimeout));
    long serverVersion = proxy.getProtocolVersion(protocol.getName(), 
                                                  clientVersion);
    if (serverVersion == clientVersion) {
      return proxy;
    } else {
      throw new VersionMismatch(protocol.getName(), clientVersion, 
                                serverVersion);
    }
  }


通过RPC  远程调用连接到服务端后.通过传入代理接口 获取到JobTracker 类
代理模式 就详细的讲了,如有必要 可翻看java代理模式

这里 getPoxy() 方法中调用  new Invoker(protocol, addr, ticket, conf, factory, rpcTimeout)) 通过new Invoker() 获得client.该cleintt 先判断ClientCache 是不是已经含有该client 如果有则加+1 如果没有 则new Client 生成一个 代码如下

 private synchronized Client getClient(Configuration conf,
        SocketFactory factory) {
      // Construct & cache client.  The configuration is only used for timeout,
      // and Clients have connection pools.  So we can either (a) lose some
      // connection pooling and leak sockets, or (b) use the same timeout for all
      // configurations.  Since the IPC is usually intended globally, not
      // per-job, we choose (a).
      Client client = clients.get(factory);
      if (client == null) {
        client = new Client(ObjectWritable.class, conf, factory);
        clients.put(factory, client);
      } else {
        client.incCount();
      }
      return client;
    }
/* 每次 +1 */
 synchronized void incCount() {
    refCount++;
  }
  


JobTracker 将其加入到job队列中

该过程 完成了 用户通过JobClient 像JobTracker 提交作业的流程,提交的过程中不是通过直接提交而是通过了rpc 通信 创建JobClient 代理 通过代理模式提交


  • 大小: 24.4 KB
8
1
分享到:
评论
2 楼 黎明lm 2013-03-28  
meifangzi 写道
楼主真厉害  都分析源码了

用了很久.一直没写出来,博客荒废了很久,重新分析下 就当复习了,一起交流学习
1 楼 meifangzi 2013-03-28  
楼主真厉害  都分析源码了

相关推荐

    hadoop源码分析

    作业提交完成后,JobClient会通过RPC调用JobTracker的submitJob()方法,至此,作业提交过程结束。在JobTracker中,JobInProgress和TaskInProgress等类用于管理和监控作业的执行状态和进度。TaskTracker作为工作节点...

    Hadoop大数据处理-Job提交过程分析

    作业提交的四个基本步骤包括:JobClient通过RPC接口向JobTracker提交作业;用户通过Shell命令提交作业;作业文件的上传;以及TaskScheduler对作业进行初始化。整个过程从用户提交作业命令开始,直至作业被初始化并在...

    MapReduce Job集群提交过程源码跟踪及分析

    完成初始化后,JobClient通过RPC(Remote Procedure Call)与JobTracker通信,发送JobProtobuf和staging area的路径。JobTracker接收到请求后,会创建一个新的JobInProgress对象,用于跟踪作业的整个生命周期。 3....

    Hadoop运行流程详解

    - JobInProgress:JobTracker接收到JobClient提交的作业后,会创建一个JobInProgress实例,用于跟踪和调度作业,并将其放入作业队列。 - TaskInProgress:JobTracker启动任务时,通过TaskInProgress来launchTask。...

    我的面试题

    5. **提交 Job 至 JobTracker**:完成资源文件的上传后,`JobClient` 通过 RPC 调用向 `JobTracker` 提交作业。这里提交的信息主要包括 Job ID 和作业所在 HDFS 的文件目录等基本信息。 6. **JobTracker 初始化作业...

    hadoop api.doc

    主要类有`JobConf`、`JobClient`和`JobTracker`,用于管理MapReduce作业的生命周期。 7. **org.apache.hadoop.metrics**: 提供了度量和监控Hadoop组件性能的API,如`MetricsContext`和`MetricsRecord`,可以收集并...

    my document

    5. **提交作业**:`JobClient` 通过 RPC 机制将作业的基本信息(如 `jobID` 和 HDFS 文件目录)发送给 `JobTracker`。 6. **作业排队**:`JobTracker` 将接收到的作业信息放入作业队列等待执行。一旦有可用资源,`...

    hadoop-eclipse-plugin-2.2.0依赖包(亲验)

    这两个JAR文件提供了提交、监控和管理MapReduce作业的能力,以及相应的测试用例。 hadoop-common-2.2.0-tests.jar包含了Hadoop Common的测试代码,用于验证通用功能模块的正确性。同样,这些测试在开发和调试阶段...

Global site tag (gtag.js) - Google Analytics