设为首页 收藏本站
查看: 800|回复: 0

[经验分享] 大数据框架hadoop的IPC应用场景之getNewJobId

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-12-1 08:54:21 | 显示全部楼层 |阅读模式
                      
作为典型的分布式系统,Hadoop中各个实体间存在着大量的交互,远程过程调用让用户可以像调用本地方法一样调用另外一个应用程序提供的服务,而不必设计和开发相关的信息发送、处理和接收等具体代码,是一种重要的分布式计算技术,它提高了程序的互操作性,在Hadoop的实现中得到广泛的应用。
Hadoop没有使用Java RMI,而是实现了一套自己独有的节点间通信机制,理由是有效的IPC(Inter-Process Communication,进程间通信)对于Hadoop来说是至关重要的,Hadoop需要精确控制进程间通信中比如连接、超时、缓存等通信细节。
如下是Hadoop 框架中实现了客户端调用JobTracker服务器端方法的一个具体应用,功能是返回分配给新作业的ID串。接下来从客户端调用、服务器端接口及功能实现和服务器端的监听来展现这一功能。
1      客户端调用类JobClientpublicclass JobClient extends Configured implements MRConstants, Tool  {
  private JobSubmissionProtocol jobSubmitClient;

  // 客户端通过代理对象直接进行方法调用。
  public RunningJob submitJobInternal(final JobConf job) {
......
    JobID jobId = jobSubmitClient.getNewJobId();
... ...
  }
  // 如下是代理对象的构造方法,首先判断当前hadoop环境是否是本地的,如果不是本地的则构造一个要请求服务器的网络地址(IP和端口),网络地址的信息来自于配置文件中属性mapred.job.tracker的配置,如果配置文件没有该项配置,则取默认值local
  publicvoid init(JobConf conf) throws IOException {
    String tracker = conf.get("mapred.job.tracker", "local");
    if ("local".equals(tracker)) {
      conf.setNumMapTasks(1);
      this.jobSubmitClient = new LocalJobRunner(conf);
    } else {
      this.jobSubmitClient = createRPCProxy(JobTracker.getAddress(conf), conf);
    }        
  }
    在IPC中,使用RPC.getProxy()方法获取到一个JobSubmissionProtocol代理对象。
  privatestatic JobSubmissionProtocol createRPCProxy(InetSocketAddressaddr,Configuration conf) throws IOException {
    return (JobSubmissionProtocol) RPC.getProxy(JobSubmissionProtocol.class,
       JobSubmissionProtocol.versionID, addr,
       UserGroupInformation.getCurrentUser(),conf,
        NetUtils.getSocketFactory(conf, JobSubmissionProtocol.class));
  }
2      接口JobSubmissionProtocol    如下是服务器端服务接口定义:
interface JobSubmissionProtocolextends VersionedProtocol {
  publicstaticfinallongversionID = 28L;
  /**
   * Allocate a name forthe job.
   * @return a unique job name for submitting jobs.
   * @throws IOException
   */
  public JobID getNewJobId() throws IOException;
}
3      实现类JobTracker    如下是服务器端服务实现类定义:
publicclass JobTracker implements MRConstants, InterTrackerProtocol,
    JobSubmissionProtocol,TaskTrackerManager, RefreshUserMappingsProtocol,
   RefreshAuthorizationPolicyProtocol, AdminOperationsProtocol,
    JobTrackerMXBean {
  /**
   * Allocates a new JobIdstring.
   */
  publicsynchronized JobID getNewJobId() throws IOException {
    returnnew JobID(getTrackerIdentifier(),nextJobId++);
  }
}
4      服务器监听类
在服务器端先构造一个要提供服务的网络地址addr,传递到RPC.getServer()方法中。服务器端使用RPC.getServer()方法创建服务器端对象interTrackerServer。
Server端的Handler实例(线程)的个数为由配置文件的属性mapred.job.tracker.handler.count指定。
publicclass JobTracker implements MRConstants, InterTrackerProtocol,
    JobSubmissionProtocol,TaskTrackerManager, RefreshUserMappingsProtocol,
   RefreshAuthorizationPolicyProtocol, AdminOperationsProtocol,
   JobTrackerMXBean {
JobTracker(final JobConf conf, String identifier, Clock clock, QueueManagerqm) {
... ...
    InetSocketAddress addr = getAddress(conf);
... ...
inthandlerCount = conf.getInt("mapred.job.tracker.handler.count", 10);
    this.interTrackerServer =
      RPC.getServer(this, addr.getHostName(), addr.getPort(), handlerCount,
          false, conf, secretManager);
    ... ...
  }

  publicstatic InetSocketAddress getAddress(Configuration conf) {
    String jobTrackerStr =
      conf.get("mapred.job.tracker", "localhost:8012");
    return NetUtils.createSocketAddr(jobTrackerStr);
  }
}


                   


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-34168-1-1.html 上篇帖子: Hbase安装 - 伪分布式模式 下篇帖子: Hadoop2.X大数据平台V3视频教程|Hadoop2视频教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表