1. 概述
配置 TRANSWARP INCEPTOR資料源、Hadoop Hive資料源 時,存在設定項 HDFS 地址。如下圖所示:
HDFS 地址介紹:
是 Hadoop HDFS 檔案系統處於活躍狀態的節點地址。
格式為 "hdfs://ip:port";例如:hdfs://192.168.101.119:8020。
本文將介紹確定 HDFS 地址中 IP 和埠的方法。
2. 操作步驟
2.1 確定埠號
在資料庫中使用 SQL 語句:desc formatted <dbName>.<tableName>,在查詢結果中查看 Location 行資訊。
2.1.1 案例一
從查詢結果中,可發現埠號為 9000,主機名稱為 hive1 。
2.1.2 案例二
部分場景中,查詢結果的 Location 行資訊中沒有埠號,此時使用預設埠號 8020 。如下圖所示:
從下圖可看出,主機名稱是 HDFS-HA 。
2.1.3 案例三
無法在 Location 中確認到埠號。
這種情況屬於 HDFS 高可用叢集架構。高可用架構裏面有兩個 NameNode ,這兩個 NameNode 地位平等,其中一個是主 NameNode ,是Active 狀態,另外一個 NameNode 是從, Standby 狀態。兩個 NameNode 同時啟動,只有一個 NameNode 會進入工作狀態。在任何時間點,其中之一 NameNode 是處於 Active 狀態,另一種是在Standby 狀態。 Active NameNode 負責所有的用戶端的操作,而 Standby NameNode 盡可能用來儲存好足夠多的狀態,以提供快速的故障恢複能力。透過 hdfs-site.xml 檔案來確認HDFS節點的地址,一般高可用檔案配置如下,獲取NameNode 的 rpc 通訊埠號:
hdfs-site.xml
<!-- 高可用架構下集群使用NameNode,配置集群标識, mycluster -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!-- NameNode節點标識 -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<!-- NameNode1的rpc通訊端口号 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>node00:8020</value>
</property>
<!-- NameNode2的rpc通訊端口号 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>node01:8020</value>
</property>
<!-- NameNode1的http通訊端口号 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>node00:50070</value>
</property>
<!-- NameNode2的http通訊端口号 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>node01:50070</value>
</property>
<!-- 配置共享存儲 JN -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node00:8485;node01:8485;node02:8485/mycluster</value>
</property>
<!-- 配置失敗轉移執行類 -->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
</value>
</property>
<!-- 當進行切換時,通過何種機制殺死原先 active 的 namenode -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- SSH 私鑰,上面殺掉原先進程使用sshfence方式需使用私鑰 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- JN 存放元數據的目錄 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/software/hadoop/hdfs/journalnode/data</value>
</property>
<!-- 當NameNode宕機,切換方式設置爲自動 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
2.2 獲取IP
在資料庫所在的伺服器中,ping 對應的主機名稱。
2.1.1 節範例中,主機名稱為 hive1,在 hive 資料庫所在的伺服器上 ping,如下圖所示:
從上圖可得出,hdfs 的 IP 就是 192.168.101.243 。
2.1.2 節範例中,在 cdh 平台中查詢活躍的 IP 地址,為 192.168.9.188 。如下圖所示:
2.1.3 節點範例中,由於 HDFS 的高可用是一主一備,只有主節點可以連上。主備可能會切換,所以需要用高可用的連結方式連結,配置方式如下:
注:4.1.13.2 前不支援高可用配置,需要確認主節點地址。
命令行查詢主備狀態:
一般常用的服務都會提供自帶的命令行(如 hdfs cli 等),可以透過特定命令+節點id 可以判斷主備狀態。
HDFS NameNode 主備查詢命令:
CDH中查看 HDFS 的各項參數,預設在路徑/etc/hadoop/conf.cloudera.hdfs/hdfs-site.xml下。在 hdfs-site.xml 檔案中,可以找到高可用相關的配置:
高可用配置:
從中可以看到,有兩個 namenode,一個是主節點(active),一個是備用節點(standby)。
如果使用命令行,查看主備的方法是用hdfs haadmin -getServiceState命令,如查看主節點:
進而去確認活躍節點的 ip
注:4.1.13.2 及以上版本支援高可用配置方式。
配置項 | 說明 |
---|---|
HDFS地址 | 4.1.13.2 及以上版本由原來的只可配置一個 HDFS 地址,變為可以配置多個 HDFS 地址,多個 HDFS 地址使用逗號隔開。 例如:hdfs://ip1:port1,hdfs://ip2:port2,hdfs://ip3:port3 後台利用使用者配置的多個 HDFS 地址,構造連結 HDFS 時的配置檔案進行連結。 (如https://www.jianshu.com/p/3632bd69d64b裏提及的方式一) |