Hadoop: YARN Federation

目的

YARNは数千ノードまでスケールすることが知られています。YARNのスケーラビリティはResourceManagerによって決まり、ノード数、アクティブなアプリケーション、アクティブなコンテナ、およびハートビートの頻度(ノードとアプリケーションの両方)に比例します。ハートビートを下げるとスケーラビリティは向上しますが、利用率は低下します(以前のHadoop 1.xの経験を参照)。このドキュメントでは、複数のYARNサブクラスタを統合することで、単一のYARNクラスタを数万ノードにスケールするための、フェデレーションベースのアプローチについて説明します。提案されているアプローチは、大規模な(10〜100kノード)クラスタを、それぞれ独自のYARN RMと計算ノードを持つ、サブクラスタと呼ばれる小さな単位に分割することです。フェデレーションシステムは、これらのサブクラスタをつなぎ合わせて、アプリケーションに対して1つの大きなYARNクラスタとして表示します。この統合環境で実行されるアプリケーションは、単一の巨大なYARNクラスタを認識し、統合クラスタの任意のノードでタスクをスケジュールできます。内部的には、フェデレーションシステムはサブクラスタのリソースマネージャとネゴシエートして、アプリケーションにリソースを提供します。目標は、個々のジョブがサブクラスタをシームレスに「スパン」できるようにすることです。

この設計は、各RMが担当するノード数を制限し、適切なポリシーによって、ほとんどのアプリケーションが単一のサブクラスタ内に収まるようにすることで、構造的にスケーラブルです。そのため、各RMが認識するアプリケーションの数も制限されます。これは、サブクラスタを追加するだけで(サブクラスタ間の調整はほとんど必要ないため)、ほぼ線形にスケールできることを意味します。このアーキテクチャは、各サブクラスタ内でスケジューリングの不変条件を非常に厳密に適用できます(単純にYARNから継承されます)。一方、サブクラスタ間の継続的なリバランスにより、これらのプロパティがグローバルレベルでも(それほど厳密ではなく)尊重されるようにします(たとえば、サブクラスタが多数のノードを失った場合、キューを他のサブクラスタに再マッピングして、障害が発生したサブクラスタで実行されているユーザーが不当に影響を受けないようにすることができます)。

Federationは、既存のYARNコードベースの「レイヤー」として設計されており、コアYARNメカニズムの変更は限定的です。

前提条件

  • サブクラスタ間で reasonably good な接続があると想定しています(たとえば、DC全体で統合することはまだ考えていませんが、今後の調査は除外されていません)。
  • ストア側のスケーラビリティを処理するために、HDFSフェデレーション(または同等のスケーラブルなDFSソリューション)に依存しています。

アーキテクチャ

OSS YARNは約数千ノードまでスケールすることが知られています。提案されたアーキテクチャは、そのような小さなYARNクラスタ(サブクラスタと呼ばれる)を、数万ノードで構成されるより大きな統合YARNクラスタに統合するという概念を活用しています。この統合環境で実行されるアプリケーションは、単一の大きなYARNクラスタを認識し、クラスタ内の任意のノードでタスクをスケジュールできます。内部的には、フェデレーションシステムはサブクラスタRMとネゴシエートして、アプリケーションにリソースを提供します。図1の論理アーキテクチャは、統合クラスタを構成する主要コンポーネントを示しています。これらのコンポーネントについては、以下で説明します。

YARN Federation Architecture | width=800

YARNサブクラスタ

サブクラスタは、最大数千ノードのYARNクラスタです。サブクラスタの正確なサイズは、デプロイ/メンテナンスの容易さ、ネットワークまたは可用性ゾーンとの整合性、一般的なベストプラクティスを考慮して決定されます。

サブクラスタYARN RMは、作業を維持する高可用性が有効になっている状態で実行されます。つまり、YARN RM、NMの障害を最小限の中断で許容できる必要があります。サブクラスタ全体が危険にさらされた場合、外部メカニズムによってジョブが別のサブクラスタで再送信されることが保証されます(これは最終的にフェデレーション設計に含まれる可能性があります)。

サブクラスタは、統合環境のスケーラビリティ単位でもあります。1つ以上のサブクラスタを追加することで、統合環境をスケールアウトできます。

:設計上、各サブクラスタは完全に機能するYARN RMであり、フェデレーションへの貢献度は全体的な容量のごく一部に設定できます。つまり、サブクラスタはフェデレーションに対して「部分的な」コミットメントを行いながら、容量の一部を完全にローカルな方法で提供する機能を保持できます。

ルータ

YARNアプリケーションは、いずれかのルータに送信されます。ルータは、ルーティングポリシー(ポリシーストアから取得)を適用し、ステートストアにサブクラスタURLを照会し、アプリケーション送信リクエストを適切なサブクラスタRMにリダイレクトします。ジョブが開始されるサブクラスタを「ホームサブクラスタ」と呼び、ジョブがスパンする他のすべてのサブクラスタを「セカンダリサブクラスタ」と呼びます。ルータは、ApplicationClientProtocolを外部に公開し、複数のRMの存在を透過的に隠します。これを達成するために、ルータはアプリケーションとそのホームサブクラスタ間のマッピングをステートストアにも永続化します。これにより、ルータはソフトステートになりながら、ユーザーリクエストを安価にサポートできます。これは、どのルータもこのアプリケーションからホームサブクラスタへのマッピングを回復し、リクエストをブロードキャストすることなく適切なRMに送信できるためです。パフォーマンスのキャッシュとセッションのスティッキネスが推奨される場合があります。フェデレーションの状態(アプリケーションとノードを含む)は、Web UIを介して公開されます。

AMRMProxy

AMRMProxyは、アプリケーションがサブクラスタ全体でスケールおよび実行できるようにするための重要なコンポーネントです。AMRMProxyはすべてのNMマシンで実行され、ApplicationMasterProtocolを実装することにより、AMのYARN RMへのプロキシとして機能します。アプリケーションは、サブクラスタRMと直接通信することはできません。システムによって、AMRMProxyエンドポイントにのみ接続するように強制されます。AMRMProxyエンドポイントは、(通信を動的にルーティング/分割/マージすることにより)複数のYARN RMへの透過的なアクセスを提供します。いつでも、ジョブは1つのホームサブクラスタと複数のセカンダリサブクラスタにまたがることができますが、AMRMProxyで動作するポリシーは、スケジューリングインフラストラクチャのオーバーヘッドを最小限に抑えるために、各ジョブのフットプリントを制限しようとします(スケーラビリティ/負荷のセクションで詳しく説明します)。ARMMProxyのインターセプターチェーンアーキテクチャを図に示します。

Architecture of the AMRMProxy interceptor chain | width=800

AMRMProxyの役割

  1. サブクラスタYARN RMを、誤動作するAMから保護します。AMRMProxyは、過剰なリソースを要求しているAMを調整/強制終了することにより、DDOS攻撃を防ぐことができます。
  2. クラスタ内の複数のYARN RMをマスクし、AMがサブクラスタ全体に透過的にスパンできるようにします。すべてのコンテナ割り当ては、ホームおよび他のサブクラスタRMの前にあるAMRMProxyで構成されるYARN RMフレームワークによって行われます。
  3. すべてのリクエストをインターセプトするため、アプリケーションクォータを適用できます。これは、サブクラスタRMでは適用できません(それぞれがAMリクエストの一部のみを認識するためです)。
  4. AMRMProxyは、ロードバランシング/オーバーフローポリシーを適用できます。

グローバルポリシージェネレーター

グローバルポリシージェネレーター(GPG)は、フェデレーション全体を監視し、システムが常に適切に構成および調整されていることを保証します。重要な設計ポイントは、クラスタの可用性が常時稼働のGPGに依存しないことです。GPGはすべてのクラスタ操作とは別に継続的に動作し、独自の視点を提供します。これにより、グローバルな不変条件を適用し、負荷分散に影響を与え、メンテナンスを受けるサブクラスタのドレイニングをトリガーするなどが可能です。より正確には、GPGはユーザー容量割り当てとサブクラスタのマッピングを更新し、ルーター、AMRMProxy(および場合によってはRM)で実行されるポリシーをまれに変更します。

GPGが利用できない場合、クラスタ操作はGPGが最後にポリシーを公開した時点の状態のまま続行されます。長期間の利用不能は、バランス、最適なクラスタ使用率、グローバルな不変条件などの望ましい特性の一部が失われる可能性がありますが、計算とデータへのアクセスは損なわれません。

:現在の実装では、GPGは手動調整プロセスであり、CLIを介して公開されています(YARN-3657)。

フェデレーションシステムのこの部分は、YARN-5597の今後の作業の一部です。

フェデレーション状態ストア

フェデレーション状態は、複数の個々のサブクラスタを1つの大きなフェデレーションクラスタに疎結合するために維持する必要がある追加の状態を定義します。これには、以下の情報が含まれます。

サブクラスタメンバーシップ

メンバーYARN RMは、状態ストアに継続的にハートビートを送信して、稼働状態を維持し、現在の容量/負荷情報を公開します。この情報は、グローバルポリシージェネレーター(GPG)が適切なポリシー決定を行うために使用されます。また、この情報は、ルーターが最適なホームサブクラスタを選択するためにも使用できます。このメカニズムにより、サブクラスタを追加または削除することで「クラスタフリート」を動的に拡張/縮小できます。これにより、各サブクラスタのメンテナンスも容易になります。これはYARN RMに追加する必要がある新しい機能ですが、個々のYARN RM HAと同様であるため、メカニズムはよく理解されています。

アプリケーションのホームサブクラスタ

アプリケーションマスター(AM)が実行されるサブクラスタは、アプリケーションの「ホームサブクラスタ」と呼ばれます。AMはホームサブクラスタのリソースに限定されず、セカンダリサブクラスタと呼ばれる他のサブクラスタのリソースも要求できます。フェデレーション環境は定期的に構成および調整されるため、AMがサブクラスタに配置されると、ホームサブクラスタ上のほとんどのリソースを見つけることができます。特定の場合にのみ、他のサブクラスタのリソースを要求する必要があります。

フェデレーションポリシーストア

フェデレーションポリシーストアは、論理的に分離されたストア(同じ物理コンポーネントによってサポートされている場合がありますが)であり、アプリケーションとリソース要求が異なるサブクラスタにどのようにルーティングされるかについての情報が含まれています。現在の実装では、ランダム/ハッシュ/ラウンドロビン/プライオリティから、サブクラスタの負荷と要求の局所性のニーズを考慮した、より高度なものまで、いくつかのポリシーを提供しています。

サブクラスタ全体で実行されているアプリケーション

アプリケーションが送信されると、システムはアプリケーションを実行するのに最も適切なサブクラスタを決定します。これをアプリケーションのホームサブクラスタと呼びます。AMからRMへのすべての通信は、AMマシンでローカルに実行されているAMRMProxyを介してプロキシされます。AMRMProxyは、YARN RMと同じApplicationMasterServiceプロトコルエンドポイントを公開します。AMは、ストレージレイヤーによって公開されている局所性情報を使用してコンテナを要求できます。理想的なケースでは、アプリケーションは、アプリケーションに必要なすべてのリソースとデータが利用可能なサブクラスタに配置されますが、他のサブクラスタのノードにコンテナが必要な場合は、AMRMProxyがそれらのサブクラスタのRMと透過的にネゴシエートし、リソースをアプリケーションに提供することにより、アプリケーションはフェデレーション環境全体を1つの巨大なYARNクラスタとして表示できます。AMRMProxy、グローバルポリシージェネレーター(GPG)、およびルーターは連携して、これをシームレスに実現します。

Federation Sequence Diagram | width=800

この図は、以下のジョブ実行フローのシーケンス図を示しています。

  1. ルーターは、YARNアプリケーションクライアントプロトコルに準拠したアプリケーション送信要求を受信します。
  2. ルーターは、ルーティングテーブル/ポリシーを調べて、ジョブの「ホームRM」を選択します(ポリシー構成は、ハートビートで状態ストアから受信されます)。
  3. ルーターは、メンバーシップ状態を照会して、ホームRMのエンドポイントを決定します。
  4. 次に、ルーターはアプリケーション送信要求をホームRMにリダイレクトします。
  5. ルーターは、ホームサブクラスタ識別子を使用してアプリケーション状態を更新します。
  6. アプリケーションがホームRMに送信されると、ストックYARNフローがトリガーされます。つまり、アプリケーションはスケジューラーキューに追加され、そのAMはホームサブクラスタ内の、利用可能なリソースを持つ最初のNodeManagerで開始されます。 a。このプロセス中に、AM環境は、YARN RMと通信するAMRMProxyのアドレスを示すことによって変更されます。 b。セキュリティトークンも、AMの起動時にNMによって変更されるため、AMはAMRMProxyとのみ通信できます。AMからYARN RMへの今後の通信はすべて、AMRMProxyによって仲介されます。
  7. 次に、AMはHDFSによって公開されている局所性情報を使用してコンテナを要求します。
  8. ポリシーに基づいて、AMRMProxyは、非管理対象AMを送信し、AMハートビートを関連するサブクラスタに転送することにより、他のサブクラスタでAMを偽装できます。 a。フェデレーションは、AMRMProxy HAを使用した複数のアプリケーション試行をサポートしています。AMコンテナはホームサブクラスタで異なる試行IDを持ちますが、セカンダリにある同じ非管理対象AMが試行全体で使用されます。 b。AMRMProxy HAが有効になっている場合、UAMトークンはYarnレジストリに保存されます。各アプリケーション試行のregisterApplicationMaster呼び出しで、AMRMProxyはレジストリから既存のUAMトークン(存在する場合)を取得し、既存のUAMに再接続します。
  9. AMRMProxyは、局所性情報と状態ストアで構成されたプラグイン可能なポリシーの両方を使用して、AMが受信したリソース要求をホームRMに転送するか、1つ(または複数)のセカンダリRMに転送するかを決定します。図1では、AMRMProxyが要求をセカンダリRMに転送することを決定した場合を示しています。
  10. セカンダリRMは、AMRMProxyに有効なコンテナートークンを提供して、サブクラスタ内のノードに新しいコンテナを起動します。このメカニズムにより、各サブクラスタは独自のセキュリティトークンを使用し、クラスタ全体の共有シークレットを使用してトークンを作成する必要がなくなります。
  11. AMRMProxyは、割り当て応答をAMに転送します。
  12. AMは、標準のYARNプロトコルを使用して、ターゲットNodeManager(サブクラスタ2上)でコンテナを起動します。

設定

YARNFederation を使用するように設定するには、conf/yarn-site.xml で次のプロパティを設定します。

すべての場所

これらは、フェデレーションの各マシンの conf/yarn-site.xml に表示される一般的な構成です。

プロパティ 説明
yarn.federation.enabled true フェデレーションが有効かどうか
yarn.resourcemanager.cluster-id <一意のサブクラスタID> このRMの一意のサブクラスタ識別子(HAに使用されるものと同じ)。

状態ストア

現在、ZooKeeperとSQLベースの状態ストアの実装をサポートしています。

注:状態ストアの実装は、常に以下のいずれかで上書きする必要があります。

ZooKeeper:HadoopのZooKeeper設定を行う必要があります

プロパティ 説明
yarn.federation.state-store.class org.apache.hadoop.yarn.server.federation.store.impl.ZookeeperFederationStateStore 使用する状態ストアのタイプ。
hadoop.zk.address ホスト:ポート ZooKeeperアンサンブルのアドレス。

SQL:次のパラメータを設定する必要があります

プロパティ 説明
yarn.federation.state-store.class org.apache.hadoop.yarn.server.federation.store.impl.SQLFederationStateStore 使用する状態ストアのタイプ。
yarn.federation.state-store.sql.url jdbc:mysql://<ホスト>:<ポート>/FederationStateStore SQLFederationStateStoreの場合、状態が格納されるDBの名前。
yarn.federation.state-store.sql.jdbc-class com.mysql.jdbc.jdbc2.optional.MysqlDataSource SQLFederationStateStoreの場合、使用するjdbcクラス。
yarn.federation.state-store.sql.username <dbuser> SQLFederationStateStoreの場合、DB接続のユーザー名。
yarn.federation.state-store.sql.password <dbpass> SQLFederationStateStoreの場合、DB接続のパスワード。

MySQLとMicrosoft SQL Serverのスクリプトを提供しています.

MySQLの場合、MVNリポジトリから最新のjarバージョン5.xをダウンロードし、CLASSPATHに追加する必要があります。次に、データベースで次のSQLスクリプトを実行することにより、DBスキーマが作成されます。

  1. sbin/FederationStateStore/MySQL/FederationStateStoreDatabase.sql.
  2. sbin/FederationStateStore/MySQL/FederationStateStoreUser.sql.
  3. sbin/FederationStateStore/MySQL/FederationStateStoreTables.sql.
  4. sbin/FederationStateStore/MySQL/FederationStateStoreStoredProcs.sql.

同じディレクトリに、ストアドプロシージャ、テーブル、ユーザー、およびデータベースを削除するためのスクリプトを提供しています。

注: FederationStateStoreUser.sqlは、DBのデフォルトのユーザー/パスワードを定義しています。適切な強力なパスワードに設定することを強くお勧めします

SQL Serverの場合、プロセスは似ていますが、jdbcドライバーは既に含まれています。SQL Serverスクリプトは、sbin/FederationStateStore/SQLServer/ にあります。

オプション

プロパティ 説明
yarn.federation.failover.enabled true 各サブクラスタ内でRMフェイルオーバーを考慮して再試行するかどうか。
yarn.federation.blacklist-subclusters <サブクラスタID> ブラックリストに登録されたサブクラスタのリスト。サブクラスタを無効にするのに役立ちます。
yarn.federation.policy-manager org.apache.hadoop.yarn.server.federation.policies.manager.WeightedLocalityPolicyManager ポリシーマネージャーの選択により、アプリケーションとResourceRequestがシステムをどのようにルーティングされるかが決まります。
yarn.federation.policy-manager-params <バイナリ> ポリシーを設定するペイロード。この例では、ルーターとamrmproxyポリシーの重みのセット。これは通常、プログラムで構成されたpolicymanagerをシリアル化するか、状態ストアに.jsonシリアル化形式を入力することによって生成されます。
yarn.federation.subcluster-resolver.class org.apache.hadoop.yarn.server.federation.resolver.DefaultSubClusterResolverImpl ノードが属するサブクラスタと、ラックが属するサブクラスタを解決するために使用されるクラス。
yarn.federation.machine-list <マシンリストファイルのパス> SubClusterResolver が使用するマシンリストファイルのパス。ファイルの各行は、サブクラスタとラック情報を持つノードです。以下は例です。

node1, subcluster1, rack1
node2, subcluster2, rack1
node3, subcluster3, rack2
node4, subcluster3, rack2

RM上

これらは、各ResourceManagerの conf/yarn-site.xml に表示される追加の構成です。

プロパティ 説明
yarn.resourcemanager.epoch <一意のエポック> エポックのシード値。これは、異なるRMによって生成されたコンテナIDの一意性を保証するために使用されます。そのため、サブクラスタ間で一意であり、エポックを増分する障害に対応できるように「十分に間隔を空けて」おく必要があります。1000単位の増分により、多数のサブクラスタが可能になり、衝突の可能性がほぼゼロになります(衝突は、コンテナが1つのRMの1000回の再起動の間も存続し、次のRMが再起動せず、アプリがより多くのコンテナを要求した場合にのみ発生します)。

オプション

プロパティ 説明
yarn.federation.state-store.heartbeat-interval-secs 60 RMが中央の状態ストアにフェデレーションへのメンバーシップを報告する頻度。

ルーター上

これらは、各ルーターの conf/yarn-site.xml に表示される追加の構成です。

プロパティ 説明
yarn.router.bind-host 0.0.0.0 ルーターをバインドするホストIP。サーバーが実際にバインドするアドレス。このオプションのアドレスが設定されている場合、RPCサーバーとwebappサーバーは、それぞれこのアドレスとyarn.router.*.addressで指定されたポートにバインドされます。これは、0.0.0.0 に設定することで、ルーターをすべてのインターフェースでリッスンさせる場合に最も役立ちます。
yarn.router.clientrm.interceptor-class.pipeline org.apache.hadoop.yarn.server.router.clientrm.FederationClientInterceptor クライアントとインターフェースをとる際に、ルーターで実行されるインターセプタークラスのカンマ区切りリスト。このパイプラインの最後のステップは、Federation Client Interceptorである必要があります。

オプション

プロパティ 説明
yarn.router.hostname 0.0.0.0 ルーターのホスト名。
yarn.router.clientrm.address 0.0.0.0:8050 ルーターのクライアントアドレス。
yarn.router.webapp.address 0.0.0.0:8089 ルーターのウェブアプリケーションアドレス。
yarn.router.admin.address 0.0.0.0:8052 ルーターの管理アドレス。
yarn.router.webapp.https.address 0.0.0.0:8091 ルーターのセキュアウェブアプリケーションアドレス。
yarn.router.submit.retry 3 諦めるまでにルーターで再試行する回数。
yarn.federation.statestore.max-connections 10 各ルーターがステートストアに対して行う並列接続の最大数。
yarn.federation.cache-ttl.secs 60 ルーターは情報をキャッシュし、これはキャッシュが無効になるまでの時間です。
yarn.router.webapp.interceptor-class.pipeline org.apache.hadoop.yarn.server.router.webapp.FederationInterceptorREST RESTインターフェースを介してクライアントとインターフェースをとる際に、ルーターで実行されるインターセプタークラスのカンマ区切りリスト。このパイプラインの最後のステップは、Federation Interceptor RESTである必要があります。

ノードマネージャー上

これらは、各ノードマネージャーの conf/yarn-site.xml に記載する必要がある追加設定です。

プロパティ 説明
yarn.nodemanager.amrmproxy.enabled true AMRMProxyが有効かどうか。
yarn.nodemanager.amrmproxy.interceptor-class.pipeline org.apache.hadoop.yarn.server.nodemanager.amrmproxy.FederationInterceptor amrmproxyで実行されるインターセプターのカンマ区切りリスト。フェデレーションの場合、パイプラインの最後のステップはFederationInterceptorである必要があります。

オプション

プロパティ 説明
yarn.nodemanager.amrmproxy.ha.enable true 複数のアプリケーション試行をサポートするためにAMRMProxy HAが有効かどうか。
yarn.federation.statestore.max-connections 1 各AMRMProxyからステートストアへの並列接続の最大数。多くのAMRMProxyが多数のDB接続をすぐに使い果たしてしまう可能性があるため、この値は通常、ルーターの値よりも低くなります。
yarn.federation.cache-ttl.secs 300 AMRMProxyキャッシュの有効期限。AMRMProxyの数が多く、集中型ステートストアへの負荷を制限したいので、通常はルーターよりも大きくなります。

サンプルジョブの実行

Federationクラスタにジョブを送信するには、ジョブが送信されるクライアント用に個別の設定セットを作成する必要があります。これらの設定では、conf/yarn-site.xml に次の追加設定が必要です。

プロパティ 説明
yarn.resourcemanager.address <router_host>:8050 クライアントで起動されたジョブをルーターのクライアントRMポートにリダイレクトします。
yarn.resourcemanager.scheduler.address localhost:8049 ジョブをフェデレーションAMRMProxyポートにリダイレクトします.

クラスタのYARNジョブは、上記で説明したクライアント設定から送信できます。フェデレーションを通じてジョブを起動するには、最初にこちらで説明されているように、フェデレーションに関与するすべてのクラスタを起動します。次に、次のコマンドを使用して、ルーターマシンでルーターを起動します。

  $HADOOP_HOME/bin/yarn --daemon start router

ここで、$HADOOP_CONF_DIRが上記で説明したクライアント設定フォルダを指している状態で、通常どおりにジョブを実行します。上記で説明したクライアント設定フォルダの設定は、ジョブをルーターのクライアントRMポートに転送します。ルーターは、起動後にこのポートでリッスンしているはずです。クライアントからフェデレーションクラスタでPiジョブを実行する例を次に示します。

  $HADOOP_HOME/bin/yarn jar hadoop-mapreduce-examples-3.0.0.jar pi 16 1000

このジョブはルーターに送信されます。ルーターは、上記で説明したように、GPGから生成されたポリシーを使用して、ジョブの送信先となるホームRMを選択します。

この特定のサンプルジョブからの出力は、次のようになります。

  2017-07-13 16:29:25,055 INFO mapreduce.Job: Job job_1499988226739_0001 running in uber mode : false
  2017-07-13 16:29:25,056 INFO mapreduce.Job:  map 0% reduce 0%
  2017-07-13 16:29:33,131 INFO mapreduce.Job:  map 38% reduce 0%
  2017-07-13 16:29:39,176 INFO mapreduce.Job:  map 75% reduce 0%
  2017-07-13 16:29:45,217 INFO mapreduce.Job:  map 94% reduce 0%
  2017-07-13 16:29:46,228 INFO mapreduce.Job:  map 100% reduce 100%
  2017-07-13 16:29:46,235 INFO mapreduce.Job: Job job_1499988226739_0001 completed successfully
  .
  .
  .
  Job Finished in 30.586 seconds
  Estimated value of Pi is 3.14250000......

ジョブの状態は、routerhost:8089 のRouter Web UIでも追跡できます。フェデレーションを使用するために、コードの変更や入力jarの再コンパイルは必要ありません。また、このジョブの出力は、フェデレーションなしで実行した場合とまったく同じです。また、フェデレーションのメリットを最大限に活用するには、複数のクラスタが必要になるほど多数のマッパーを使用してください。上記の例では、その数は16です。