NN HA 對於 Client 透明的實驗

之前轉載過一篇【伊利丹】寫的NN HA實驗記錄,該博客描述了主備NN透明切換的過程,也就是說,當主NN掛掉後,自動將備NN切換爲主NN了,Hadoop集羣正常運行。

今天我繼續做了一個實驗,目的是實現NN的切換不會對Client端程序造成影響,即NN切換對Client透明。


首先,很重要的一點:

要保證core-site.xml中的

  1. <property>  
  2.     <name>fs.defaultFS</name>  
  3.     <value>hdfs://hadoop-cluster</value>   
  4. </property>
和hdfs-site.xml中的

  1. <property>  
  2.     <name>dfs.nameservices</name>  
  3.     <value>hadoop-cluster</value>  
  4. </property>
邏輯名稱一定要一致


其次:

/etc/hosts文件中無需爲hadoop-cluster指定IPhadoop-cluster只是一個邏輯名,當程序或者命令通過hadoop-cluster訪問HDFS集羣時,Hadoop會自動根據hdfs-site.xml的配置,去找到一個active的Namenode。

當然,hdfs-site.xml中的

  1. <property>  
  2.     <name>dfs.namenode.rpc-address.hadoop-cluster.namenode1</name>  
  3.     <value>NODE001:8020</value>  
  4. </property>  
  5. <property>  
  6.     <name>dfs.namenode.rpc-address.hadoop-cluster.namenode2</name>  
  7.     <value>NODE002:8020</value>  
  8. </property>
和/etc/hosts文件中的NODE001、NODE002是必須配置的,否則Hadoop再聰明也沒法得知到底和哪個節點交互了。


最後就是Client了,

無論Namenode如何切換,都可以在任意Hadoop節點上正常執行命令  hadoop dfs -ls hdfs://hadoop-cluster/  ,或者在程序中,將HDFS目標地址指定爲  hdfs://hadoop-cluster 即可正常運行程序。

關鍵在於,不通過IP地址或主備NN的主機名訪問HDFS,而是通過HDFS的邏輯名訪問。

這樣的話,命令和程序的執行與當前Active的Namenode是哪個節點毫無關係,一切皆透明,感覺真爽!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章