欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

hadoop2.4namenodeha的原理是什么

本篇內(nèi)容介紹了“hadoop 2.4  namenode ha的原理是什么”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)專注于企業(yè)網(wǎng)絡(luò)營銷推廣、網(wǎng)站重做改版、環(huán)江網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5技術(shù)電子商務(wù)商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為環(huán)江等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

在2.0 的HA部分,我們可以看到相比原來的1.0,多了DFSZKFailoverController ,JournalNode 進(jìn)程。

DFSZKFailoverController顧名思義就是用于整個(gè)主備切換的控制器。

JournalNode 是active和standby元數(shù)據(jù)共享的傳輸介質(zhì)。

而DFSZKFailoverController主要負(fù)責(zé)active NN的選舉通過ActiveStandbyElector來實(shí)現(xiàn),對于nn本身的監(jiān)控通過HealthMonitor類來實(shí)現(xiàn),下面我們來分析一下HealthMonitor來究竟做了哪些工作以及對NN的監(jiān)控調(diào)用流程。

對于NN的狀態(tài),定義了如下幾類:

public enum State {
    /**
     * The health monitor is still starting up.
     */
    INITIALIZING,
    /**
     * The service is not responding to health check RPCs.
     */
    SERVICE_NOT_RESPONDING,
    /**
     * The service is connected and healthy.
     */
    SERVICE_HEALTHY,
    /**
     * The service is running but unhealthy.
     */
    SERVICE_UNHEALTHY,
    /**
     * The health monitor itself failed unrecoverably and can
     * no longer provide accurate information.
     */
    HEALTH_MONITOR_FAILED;
  }

可以看到定義了,ok or failed兩類狀態(tài)。

對于監(jiān)控的結(jié)果,healthMonitor來通過設(shè)置回調(diào)函數(shù)來實(shí)現(xiàn)。

public void addCallback(Callback cb) {
    this.callbacks.add(cb);
  }
  
 

  public synchronized void addServiceStateCallback(ServiceStateCallback cb) {
    this.serviceStateCallbacks.add(cb);
  }

addXXXCallback可以動(dòng)態(tài)添加事件回調(diào)函數(shù)。

真實(shí)監(jiān)控NN的部分

private class MonitorDaemon extends Daemon

通過內(nèi)部類MonitorDaemon來實(shí)現(xiàn)。實(shí)現(xiàn)在run方法,通過源碼可以看到run方法調(diào)用了

public void run() {
      while (shouldRun) {
        try { 
          loopUntilConnected();
          doHealthChecks();//監(jiān)控主方法
        } catch (InterruptedException ie) {
          Preconditions.checkState(!shouldRun,
              "Interrupted but still supposed to run");
        }
      }
    }

進(jìn)行監(jiān)控

我們來看下,這部分源碼:

/**
   * 狀態(tài)監(jiān)測
   * @throws InterruptedException
   */
  private void doHealthChecks() throws InterruptedException {
    while (shouldRun) {//只有在關(guān)閉的時(shí)候shouldRun=false,其他一直是true
      HAServiceStatus status = null;//NN的狀態(tài)
      boolean healthy = false;//定義健康程度
      try {
     //proxy為HAService的一個(gè)rpc代理,由NameNodeRpcServer實(shí)現(xiàn)HA的NN部分
        status = proxy.getServiceStatus();
        //本質(zhì)上調(diào)用了NN的monitorHealth方法,而NN的監(jiān)控方法,主要是對系統(tǒng)資源的一個(gè)檢查,如無異常,直接返回
        //有異常會throw出HealthCheckFailedException, AccessControlException異常
        proxy.monitorHealth();
        healthy = true;
      } catch (HealthCheckFailedException e) {//異常
        LOG.warn("Service health check failed for " + targetToMonitor
            + ": " + e.getMessage());
        enterState(State.SERVICE_UNHEALTHY);
      } catch (Throwable t) {//未知異常,一般是對應(yīng)的NN沒有啟動(dòng)
        LOG.warn("Transport-level exception trying to monitor health of " +
            targetToMonitor + ": " + t.getLocalizedMessage());
        RPC.stopProxy(proxy);
        proxy = null;
        enterState(State.SERVICE_NOT_RESPONDING);
        Thread.sleep(sleepAfterDisconnectMillis);
        return;
      }
     
      if (status != null) {
        setLastServiceStatus(status);
      }
      if (healthy) {
     //設(shè)置狀態(tài),用于通知回調(diào)函數(shù)
        enterState(State.SERVICE_HEALTHY);
      }
      Thread.sleep(checkIntervalMillis);
    }
  }

而NN的監(jiān)控,也比較單純:

synchronized void monitorHealth() 
      throws HealthCheckFailedException, AccessControlException {
    namesystem.checkSuperuserPrivilege();
    if (!haEnabled) {
      return; // no-op, if HA is not enabled
    }
    getNamesystem().checkAvailableResources();
    if (!getNamesystem().nameNodeHasResourcesAvailable()) {
      throw new HealthCheckFailedException(
          "The NameNode has no resources available");
    }
  }

可以看到其實(shí)監(jiān)控部分,就是一個(gè)rpc不斷的發(fā)送請求,讓NN自檢測然后在返回相應(yīng)的數(shù)據(jù)。

“hadoop 2.4  namenode ha的原理是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

標(biāo)題名稱:hadoop2.4namenodeha的原理是什么
本文地址:http://chinadenli.net/article16/jiejgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、定制網(wǎng)站、網(wǎng)站設(shè)計(jì)、網(wǎng)站收錄、做網(wǎng)站、

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)