このドキュメントでは、Hadoopのサービスディスカバリのメカニズムと、それを有効にするための手順について説明します。
標準的なメカニズムであるDNSルックアップを介してHadoop上のサービスを検出できるように、DNSサーバーが実装されています。
フレームワークアプリケーションマスターは、ホスト名やIPアドレスなどのコンテナ情報をHadoopサービレジストリに投稿します。DNSサーバーは、Hadoopサービレジストリの情報を、AレコードやSRVレコードなどのDNSレコードに変換することで公開します。クライアントは、標準のDNSルックアップを介してコンテナのIPを検出できます。
Docker以外のコンテナ(`Artifact`がnullのコンテナ、または`Artifact`タイプが`TARBALL`に設定されているコンテナ)の場合、同じホスト上のすべてのコンテナが同じIPアドレスを共有するため、DNSは順方向DNSルックアップをサポートしますが、逆方向DNSルックアップはサポートしません。Dockerを使用すると、各コンテナに独自のIPを設定できるため、順方向と逆方向の両方のルックアップがサポートされます。さらに、DNSは、順方向と逆方向の両方のルックアップに対して、静的ゾーンファイルの構成もサポートしています。
コンテナごとにIPアドレスを割り当てるユースケースをサポートするには、コンテナを`bridge`ネットワークで起動する必要があります。ただし、`bridge`ネットワークでは、あるノードで実行されているコンテナは、デフォルトでは他のノードからルーティングできません。これは、単一ノードテストのみを実行している場合は問題ありませんが、複数ノード環境では、コンテナを他のノードからルーティングできるようにする必要があります。
これを解決するには、GCEやAWSなどのプラットフォームに応じて、いくつかのアプローチがあります。これを有効にする方法については、特定のプラットフォームのドキュメントを参照してください。オンプレミスクラスタの場合、この問題を解決する1つの方法は、各ノードで、すべてのノードからルーティング可能なカスタムブリッジ(例:`br0`)を使用するようにDockerデーモンを構成することです。また、`fixed-cidr`オプションを使用して、CIDR形式(例:`172.21.195.240/26`(64個のIP))で表される排他的な連続したIPアドレス範囲を各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`によってデプロイされた`hbasemaster`と`regionserver`の2つのコンポーネントを持つ`hbase`という名前のサービスには、以下のようにアクセスできます。
このURLは、通常のhbaseマスターUIを指しています。
http://hbasemaster-0.hbase.devuser.yarncluster:16010/master-status
YARNサービスフレームワークは、各コンテナに単調に増加する整数のシーケンスで`COMPONENT_INSTANCE_NAME`を割り当てることに注意してください。たとえば、`hbasemaster-0`は`hbasemaster`コンポーネントの最初で唯一のインスタンスであるため、`0`が割り当てられます。`regionserver`コンポーネントの場合、複数のコンテナを持つことができるため、`regionserver-0`、`regionserver-1`、`regionserver-2`…などと名前が付けられます。
各YARNサービスコンポーネントには、RegistryDNSを介したコンテナのフォールトトレランスまたは負荷分散のためのマルチAレコードもあります。命名形式は次のように定義されています。
${COMPONENT_NAME}.${SERVICE_NAME}.${USER}.${DOMAIN}
たとえば、Chuckによって起動されたアプリケーションappのwwwという名前のコンポーネントに3つのコンテナがある場合、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として使用しないでください。