之前轉載過一篇【伊利丹】寫的NN HA實驗記錄,該博客描述了主備NN透明切換的過程,也就是說,當主NN掛掉後,自動將備NN切換爲主NN了,Hadoop集羣正常運行。
今天我繼續做了一個實驗,目的是實現NN的切換不會對Client端程序造成影響,即NN切換對Client透明。
首先,很重要的一點:
要保證core-site.xml中的
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://hadoop-cluster</value>
- </property>
- <property>
- <name>dfs.nameservices</name>
- <value>hadoop-cluster</value>
- </property>
其次:
/etc/hosts文件中無需爲hadoop-cluster指定IP,hadoop-cluster只是一個邏輯名,當程序或者命令通過hadoop-cluster訪問HDFS集羣時,Hadoop會自動根據hdfs-site.xml的配置,去找到一個active的Namenode。
當然,hdfs-site.xml中的
- <property>
- <name>dfs.namenode.rpc-address.hadoop-cluster.namenode1</name>
- <value>NODE001:8020</value>
- </property>
- <property>
- <name>dfs.namenode.rpc-address.hadoop-cluster.namenode2</name>
- <value>NODE002:8020</value>
- </property>
最後就是Client了,
無論Namenode如何切換,都可以在任意Hadoop節點上正常執行命令 hadoop dfs -ls hdfs://hadoop-cluster/ ,或者在程序中,將HDFS目標地址指定爲 hdfs://hadoop-cluster 即可正常運行程序。
關鍵在於,不通過IP地址或主備NN的主機名訪問HDFS,而是通過HDFS的邏輯名訪問。
這樣的話,命令和程序的執行與當前Active的Namenode是哪個節點毫無關係,一切皆透明,感覺真爽!