数据价值-DataValues

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 142|回复: 0

[hadoop] Hadoop源码分析之心跳机制_hadoop大数据培训

[复制链接]

1万

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
39029
发表于 2016-3-31 15:11:58 | 显示全部楼层 |阅读模式
Hadoop源码分析之心跳机制_hadoop大数据培训,
一.心跳机制,
1. hadoop集群是master/slave模式,master包括Namenode和Jobtracker,slave包括Datanode和Tasktracker。,
2. master启动的时候,会开一个ipc server在那里,等待slave心跳。,
3. slave启动时,会连接master,并每隔3秒钟主动向master发送一个“心跳”,这个时间可 以通过”heartbeat.recheck.interval”属性来设置。将自己的状态信息告诉master,然后master也是通过这个心跳的返回值,向slave节点传达指令。,
4. 需要指出的是:namenode与datanode之间的通信,jobtracker与tasktracker之间的通信,都是通过“心跳”完成的。,
二.Datanode、Namenode心跳源码分析,
既然“心跳”是Datanode主动给Namenode发送的。那Datanode是怎么样发送的呢?下面贴出Datanode.class中的关键代码:,
代码一:,
/**
  •    * 循环调用“发送心跳”方法,直到shutdown
       * 调用远程Namenode的方法
  •    */
      public void offerService() throws Exception {
  • •••
        while (shouldRun) {
  •       try {
            long startTime = now();
  •          // heartBeatInterval是在启动Datanode时根据配置文件设置的,是心跳间隔时间
            if (startTime – lastHeartbeat > heartBeatInterval) {
  •           lastHeartbeat = startTime;
    //Datanode发送心跳
  •           DatanodeCommand[] cmds = namenode.sendHeartbeat(dnRegistration,
                                                           data.getCapacity(),
  •                                                        data.getDfsUsed(),
                                                           data.getRemaining(),
  •                                                        xmitsInProgress.get(),
                                                           getXceiverCount());
  •           myMetrics.addHeartBeat(now() – startTime);
  •           if (!processCommand(cmds))
                continue;
  •         }
  •       •••
          }
  •     } // while (shouldRun)
      } // offerService
    [/ol],
    需要注意的是:发送心跳的对象并不是datanode,而是一个名为namenode的对象,难道在datanode端就直接有个namenode的引用吗?其实不然,我们来看看这个namenode吧:,
    代码二:,
    public DatanodeProtocol namenode = null;
    [/ol],
    namenode其实是一个DatanodeProtocol的引用,在对hadoop RPC机制分析的文章中我提到过,这是一个Datanode和Namenode通信的协议,其中有许多未实现的接口方法,sendHeartbeat()就是其中的一个。下面看看这个namenode对象是怎么被实例化的吧:,
    代码三:,
    this.namenode = (DatanodeProtocol)
  •     RPC.waitForProxy(DatanodeProtocol.class,
                         DatanodeProtocol.versionID,
  •                      nameNodeAddr,
                         conf);
    [/ol],
    其实这个namenode并不是Namenode的一个对象,而只是一个Datanode端对Namenode的代理对象,正是这个代理完成了“心跳”。代理的底层实现就是RPC机制了。,
    三.Tasktracker、Jobtracker心跳源码分析,
    同样我们从Tasktracker入手,下面贴出Tasktracker.class的关键代码:,
    代码四:,
    代码一:
  • State offerService() throws Exception {
        long lastHeartbeat = System.currentTimeMillis();
  •     while (running && !shuttingDown) {
         •••

  •         // 发送心跳,调用代码二
  •         HeartbeatResponse heartbeatResponse = transmitHeartBeat(now);
  •       •••
        return State.NORMAL;
  •   }
  • 代码二:
    HeartbeatResponse transmitHeartBeat(long now) throws IOException {
  •    •••
        HeartbeatResponse heartbeatResponse = jobClient.heartbeat(status,
  •                                                               justStarted,
                                                                  justInited,
  •                                                               askForNewTask,
                                                             heartbeatResponseId);
  • •••
        return heartbeatResponse;
  •   }
    [/ol],
    其实我觉得分析到这里大家就可以自己分析了,jobClient也是一个协议:,
    代码五:,
    InterTrackerProtocol jobClient;
    [/ol],
    该协议用于定义Tasktracker和Jobtracker的通信。同样,它也是一个代理对象:,
    代码六:,
    this.jobClient = (InterTrackerProtocol)
  •     UserGroupInformation.getLoginUser().doAs(
            new PrivilegedExceptionAction() {
  •       public Object run() throws IOException {
            return RPC.waitForProxy(InterTrackerProtocol.class,
  •             InterTrackerProtocol.versionID,
                jobTrackAddr, fConf);
  •       }
        });
    [/ol],
    终于,hadoop底层通信整个系列的源码分析全部完成了。我可以好好地复习学校的功课了。呵呵。,
    转载请注明:数据分析 » Hadoop源码分析之心跳机制_hadoop大数据培训
  • 回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|DataValues ( 赣ICP备16006919号 ) DataValues

    GMT+8, 2019-10-19 10:51 , Processed in 0.130080 second(s), 29 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

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