本文檔描述了 Hadoop 上的服務發現機制以及啟用它的步驟。
實作了一個 DNS 伺服器,以透過標準機制(DNS 查詢)在 Hadoop 上發現服務。
架構 ApplicationMaster 會將容器資訊(例如主機名稱和 IP 位址)張貼到 Hadoop 服務註冊中心。DNS 伺服器會透過將 Hadoop 服務註冊中心的資訊轉換成 DNS 記錄(例如 A 記錄和 SRV 記錄)來公開這些資訊。然後,客戶端就能透過標準 DNS 查詢來發現容器的 IP。
對於非 Docker 容器(具有空值 Artifact
或將 Artifact
類型設定為 TARBALL
的容器),由於同一主機上的所有容器共用相同的 IP 位址,因此 DNS 支援正向 DNS 查詢,但不支援反向 DNS 查詢。使用 Docker 時,它同時支援正向和反向查詢,因為每個容器都可以設定為擁有自己獨特的 IP。此外,DNS 也支援為正向和反向查詢設定靜態區域檔案。
為支援每個容器每個 IP 的使用案例,必須使用 bridge
網路啟動容器。但是,使用 bridge
網路時,預設情況下,在一個節點上執行的容器無法從其他節點路由。如果您只進行單一節點測試,這不是問題,但是,對於多節點環境,容器必須能夠從其他節點路由。
有幾種方法可以解決這個問題,具體取決於平台,例如 GCE 或 AWS。請參閱特定平台文件,了解如何啟用此功能。對於內部部署叢集,解決此問題的方法之一是在每個節點上設定 Docker 守護程式,以使用自訂橋接器,例如 br0
,該橋接器可以從所有節點路由。另外,使用 fixed-cidr
選項,將以 CIDR 形式表示的獨佔、連續的 IP 位址範圍(例如 172.21.195.240/26 (64 IPs)
)指定給每個 Docker 守護程式,如下所示在 Docker daemon.json
中
"bridge": "br0" "fixed-cidr": "172.21.195.240/26"
查看如何自訂 Docker 橋接器網路以取得詳細資訊。
有了 DNS 支援,使用者可以輕鬆地以定義良好的命名格式存取其服務,如下所示
${COMPONENT_INSTANCE_NAME}.${SERVICE_NAME}.${USER}.${DOMAIN}
例如,在網域名稱為 yarncluster
的叢集中(由 core-site.xml
中的 hadoop.registry.dns.domain-name
定義),使用者 devuser
部署的名稱為 hbase
的服務,其中包含兩個組件 hbasemaster
和 regionserver
,可以如下所示存取
此 URL 指向通常的 HBase 主控台 UI
http://hbasemaster-0.hbase.devuser.yarncluster:16010/master-status
請注意,YARN 服務架構會為序列中單調遞增整數的每個容器指定 COMPONENT_INSTANCE_NAME
。例如,hbasemaster-0
被指定為 0
,因為它是 hbasemaster
組件的第一個也是唯一的執行個體。在 regionserver
組件的情況下,它可以有多個容器,因此可以命名為:regionserver-0
、regionserver-1
、regionserver-2
… 等
每個 YARN 服務組件還具有多 A 記錄,以透過 RegistryDNS 實現容器容錯或負載平衡。命名格式定義為
${COMPONENT_NAME}.${SERVICE_NAME}.${USER}.${DOMAIN}
例如,Chuck 啟動的應用程式 app 的名為 www 的組件將有如下所示的 DNS 記錄
www.app.chuck.example.com IN A 123.123.123.1 www.app.chuck.example.com IN A 123.123.123.1 www.app.chuck.example.com IN A 123.123.123.1
免責聲明
:DNS 實作仍為實驗性質。不應將其用作功能齊全的 DNS。