真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Hadoop中DataNode的啟動(dòng)過程介紹

這篇文章主要講解了“Hadoop中DataNode的啟動(dòng)過程介紹”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Hadoop中DataNode的啟動(dòng)過程介紹”吧!

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),昭通企業(yè)網(wǎng)站建設(shè),昭通品牌網(wǎng)站建設(shè),網(wǎng)站定制,昭通網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,昭通網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

DataNode同NameNode都一樣,是一個(gè)java進(jìn)程,所以從main方法開始,看代碼:

public class DataNode extends Configured 
    implements InterDatanodeProtocol, ClientDatanodeProtocol,
    DataNodeMXBean {
  public static void main(String args[]) {
    secureMain(args, null);
  }

  public static void secureMain(String args[], SecureResources resources) {
  	DataNode datanode = createDataNode(args, null, resources);
  }

  public static DataNode createDataNode(String args[], Configuration conf,
      SecureResources resources) throws IOException {
    DataNode dn = instantiateDataNode(args, conf, resources);
    if (dn != null) {
      dn.runDatanodeDaemon();
    }
    return dn;
  }

  public static DataNode instantiateDataNode(String args [], Configuration conf,
      SecureResources resources) throws IOException {
    return makeInstance(dataLocations, conf, resources);
  }

  static DataNode makeInstance(Collection dataDirs,
      Configuration conf, SecureResources resources) throws IOException {
    return new DataNode(conf, locations, resources);
  }

  DataNode(final Configuration conf,
           final List dataDirs,
           final SecureResources resources) throws IOException {
     startDataNode(conf, dataDirs, resources);
  }

  public void runDatanodeDaemon() throws IOException {
    blockPoolManager.startAll();

    // start dataXceiveServer
    dataXceiverServer.start();
    if (localDataXceiverServer != null) {
      localDataXceiverServer.start();
    }
    ipcServer.start();
    startPlugins(conf);
  }
}

上面的代碼跟蹤不難,但是最終需要注意兩個(gè)方法:startDataNode和runDatanodeDaemon方法,前面一個(gè)用于初始化DataNode,后面一個(gè)啟動(dòng)DataNode的后臺(tái)線程,這些線程是會(huì)伴隨DataNode進(jìn)程一直跑著的。接著,讓我們重點(diǎn)研究下方法startDataNode,看代碼:

void startDataNode(Configuration conf, 
                     List dataDirs,
                    // DatanodeProtocol namenode,
                     SecureResources resources
                     ) throws IOException {
    storage = new DataStorage();
    
    // global DN settings
    registerMXBean();
    initDataXceiver(conf);
    startInfoServer(conf);
    pauseMonitor = new JvmPauseMonitor(conf);
    pauseMonitor.start();

    initIpcServer(conf);
    blockPoolManager = new BlockPoolManager(this);
    blockPoolManager.refreshNamenodes(conf);
  }

registerMXBean這個(gè)方法可以忽略,用來注冊(cè)MBean信息;initDataXceiver這個(gè)方法應(yīng)該來說還是比較重要,實(shí)例化的dataXceiverServer用來接受客戶端或者其他datanode的數(shù)據(jù)接收或者發(fā)送請(qǐng)求;startInfoServer方法用來啟動(dòng)datanode的web服務(wù)器;pauseMonitor用來監(jiān)控jvm是否有停頓;initIpcServer方法比較重要,用來啟動(dòng)datanode上的rpc服務(wù),主要包括兩個(gè)服務(wù):ClientDatanodeProtocolPB和InterDatanodeProtocolPB。

然后屬于DataNode的重點(diǎn)來了,blockPoolManager對(duì)象的實(shí)例化,注意一點(diǎn),2.4.1 這個(gè)版本的hadoop已經(jīng)支持了hadoop Federation的特性,而blockPooolManager就是支撐這個(gè)特性來的。現(xiàn)在讓我們來看看他里面的東西。還是先上代碼吧。

class BlockPoolManager {
  BlockPoolManager(DataNode dn) {
    this.dn = dn;
  }

  void refreshNamenodes(Configuration conf)
      throws IOException {
    synchronized (refreshNamenodesLock) {
      doRefreshNamenodes(newAddressMap);
    }
  }

  private void doRefreshNamenodes(
      Map> addrMap) throws IOException {
 synchronized (this) {
		startAll();
	}
  }

  synchronized void startAll() throws IOException {
	for (BPOfferService bpos : offerServices) {
          bpos.start();
     }
  }
}

class BPOfferService {
  void start() {
    for (BPServiceActor actor : bpServices) {
      actor.start();
    }
  }
}

class BPServiceActor implements Runnable {
  void start() {
    if ((bpThread != null) && (bpThread.isAlive())) {
      //Thread is started already
      return;
    }
    bpThread = new Thread(this, formatThreadName());
    bpThread.setDaemon(true); // needed for JUnit testing
    bpThread.start();
  }

  public void run() {
while (true) {
	connectToNNAndHandshake();
     	break;
}

    while (shouldRun()) {
      offerService();   
    }
  }

  private void offerService() throws Exception {
while (shouldRun()) {
	HeartbeatResponse resp = sendHeartBeat();

	List cmds = blockReport();
}
  }
}

順著代碼往下走,整個(gè)思路都會(huì)比較清晰了,BPServiceActor這個(gè)類做了具體的事情,包括datanode跟namenode的握手,發(fā)送心跳和報(bào)告塊信息,執(zhí)行namenode發(fā)回來的命名。

詳細(xì)的過程就不啰嗦了。

到這里DataNode的啟動(dòng)過程就搞了一個(gè)段落。

感謝各位的閱讀,以上就是“Hadoop中DataNode的啟動(dòng)過程介紹”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Hadoop中DataNode的啟動(dòng)過程介紹這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


名稱欄目:Hadoop中DataNode的啟動(dòng)過程介紹
標(biāo)題鏈接:http://weahome.cn/article/pogjoe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部