高可用集羣獲取活躍NameNode的信息

今天在工作中同事問我在高可用集羣下如何獲取活躍的NameNode的信息。當時有點懵,一時間不知道咋獲取。
然後度娘了一下,最後找到了辦法。

首先先說一下啥事高可用
HA的意思是High Availability高可用,指噹噹前工作中的機器宕機後,會自動處理這個異常,並將工作無縫地轉移到其他備用機器上去,以來保證服務的高可用。
HA方式安裝部署纔是最常見的生產環境上的安裝部署方式。Hadoop HA是Hadoop 2.x中新添加的特性,包括NameNode HA 和 ResourceManager HA。因爲DataNode和NodeManager本身就是被設計爲高可用的,所以不用對他們進行特殊的高可用處理。

也就是說,活躍NameNode的ip不固定,一開始我也是開在這裏不知道如何下手,畢竟不是自己搭建的環境拿來玩的,一般情況下你都接觸不到配置文件,所以怎麼獲取活躍的NameNode IP,同事一開始是通過便利所有的NameNode 雖然實現了,但是這個也是別人提供了可能IP的結果,所以也不是最優的

下面是我通過查找資料get到的方法,是目前爲止我找到的最優方法,在此記錄一下


image.png

import org.apache.hadoop.fs.FileSystem
import org.apache.hadoop.hdfs.HAUtil
def getActiveNameNode() = {
val conf = new Configuration()
var fileSystem: FileSystem = null
fileSystem = FileSystem.get(conf)
try {
val active: InetSocketAddress = HAUtil.getAddressOfActive(fileSystem)
val address: InetAddress = active.getAddress
val ip: String = address.getHostAddress
val port: Int = active.getPort
s"hdfs://" + ip + ":" + port
} catch {
case e: Exception => e.printStackTrace()
} finally {
null
}
}

留碼必留包
如果有更好的方法 歡迎留言

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