美文网首页
hdfs datanode 启动流程中关于拉取namenode信

hdfs datanode 启动流程中关于拉取namenode信

作者: 邵红晓 | 来源:发表于2021-08-31 16:39 被阅读0次

    hfds datanode 启动组件

    hfds datanode 启动流程

    注册心跳

    image.png

    BPOfferService.java

     /**
       * Called by the BPServiceActors when they handshake to a NN.
       * If this is the first NN connection, this sets the namespace info
       * for this BPOfferService. If it's a connection to a new NN, it
       * verifies that this namespace matches (eg to prevent a misconfiguration
       * where a StandbyNode from a different cluster is specified)
       *
       * 两个namenode:
       *  hadoop1  -> actor1 => bpnsInfo
       *  hadoop2  -> actor2 => bpnsInfo
       *
       */
      void verifyAndSetNamespaceInfo(NamespaceInfo nsInfo) throws IOException {
        writeLock();
        try {
          //actor1
          //actor2
          if (this.bpNSInfo == null) {
            //赋值
            this.bpNSInfo = nsInfo;
            boolean success = false;
    
            // Now that we know the namespace ID, etc, we can pass this to the DN.
            // The DN can now initialize its local storage if we are the
            // first BP to handshake, etc.
            try {
              dn.initBlockPool(this);
              success = true;
            } finally {
              if (!success) {
                // The datanode failed to initialize the BP. We need to reset
                // the namespace info so that other BPService actors still have
                // a chance to set it, and re-initialize the datanode.
                this.bpNSInfo = null;
              }
            }
          } else {
            /**
             * datanode注册的时候 就会通过namenode获取集群的一些信息
             */
    
            //所以如果代码能走到这儿说明,我们的BlockPoolId肯定已经获取到了
            checkNSEquality(bpNSInfo.getBlockPoolID(), nsInfo.getBlockPoolID(),
                "Blockpool ID");
            checkNSEquality(bpNSInfo.getNamespaceID(), nsInfo.getNamespaceID(),
                "Namespace ID");
            checkNSEquality(bpNSInfo.getClusterID(), nsInfo.getClusterID(),
                "Cluster ID");
    
    
    //        //如果代码执行到这儿,说明不仅两个namenode上都获取到了信息,而且两个namenode的信息都对上了。
    //        if(blockPoolID == null){
    //          this.blockPoolID = bpNSInfo.getBlockPoolID();
    //        }
    
          }
        } finally {
          writeUnlock();
        }
      }
    

    总结

    可以发现,datanode通过BPServiceActors和namenode建立连接,并初始化过程中会校验Blockpool ID,Namespace ID,Cluster ID,这几个至关重要,为下文恢复集群做准备。

    相关文章

      网友评论

          本文标题:hdfs datanode 启动流程中关于拉取namenode信

          本文链接:https://www.haomeiwen.com/subject/opuziltx.html