YARN 共有キャッシュ

概要

YARN共有キャッシュは、共有アプリケーションリソースをHDFSに安全かつスケーラブルな方法でアップロードおよび管理する機能を提供します。 YARNアプリケーションは、他のアプリケーションまたは同じアプリケーションの以前の実行によってアップロードされたリソースを、同一のファイルを複数回再アップロードおよびローカライズすることなく活用できます。 これにより、ネットワークリソースが節約され、YARNアプリケーションの起動時間が短縮されます。

現状と今後の計画

現在、YARN共有キャッシュはリリースされ、すぐに使用できる状態になっています。 主要コンポーネントは実装済みであり、大規模な本番環境にデプロイされています。 まだいくつかの機能が不足しています(強力な認証など)。 これらの不足している機能は、フォローアップのフェーズ2の取り組みの一環として実装されます。 詳細については、YARN-7282を参照してください。

アーキテクチャ

共有キャッシュ機能は、4つの主要コンポーネントで構成されています。

  1. 共有キャッシュクライアント。
  2. キャッシュとして機能するHDFSディレクトリ。
  3. 共有キャッシュマネージャー(別名SCM)。
  4. ローカライズサービスとアップローダー。

共有キャッシュクライアント

YARNアプリケーションの開発者とユーザーは、共有キャッシュクライアントを使用して共有キャッシュと対話する必要があります。 このクライアントは、共有キャッシュマネージャーとの対話、アプリケーションリソースのチェックサムの計算、および共有キャッシュ内のアプリケーションリソースの要求を担当します。 アプリケーションがリソースを要求すると、アプリケーションのライフサイクル boyunca そのリソースを自由に使用できます。 詳細なドキュメントについては、SharedCacheClient.java javadocを参照してください。

共有キャッシュHDFSディレクトリ

共有キャッシュHDFSディレクトリには、すべての共有キャッシュリソースが格納されます。 HDFSパーミッションによって保護されており、グローバルに読み取り可能ですが、書き込みは信頼できるユーザーに制限されています。 このHDFSディレクトリは、共有キャッシュマネージャーとノードマネージャーのリソースアップローダーによってのみ変更されます。 リソースは、リソースのチェックサムを使用して、一連のサブディレクトリに分散されます。

/sharedcache/a/8/9/a896857d078/foo.jar
/sharedcache/5/0/f/50f11b09f87/bar.jar
/sharedcache/a/6/7/a678cb1aa8f/job.jar

共有キャッシュマネージャー (SCM)

共有キャッシュマネージャーは、クライアントからのリクエストの処理と共有キャッシュの内容の管理を担当します。 メタデータとHDFSに永続化されたリソースの両方を管理します。 バックエンドストアとクリーナーサービスの2つの主要コンポーネントで構成されています。 SCMは、クラスター内の任意のノードに配置できる個別のデーモンプロセスとして実行されます。 これにより、管理者は他のYARNコンポーネント(リソースマネージャーやノードマネージャーなど)に影響を与えることなく、SCMを起動/停止/アップグレードできます。

バックエンドストアは、共有キャッシュに関するメタデータの維持と永続化を担当します。 これには、キャッシュ内のリソース、リソースが最後に使用された日時、および現在リソースを使用しているアプリケーションのリストが含まれます。 バッキングストアの実装はプラグイン可能であり、現在は再起動後に状態を再作成するインメモリストアを使用しています。

クリーナーサービスは、使用されなくなったリソースがキャッシュから削除されるようにすることで、HDFSに永続化されたリソースを維持します。 定期的にキャッシュ内のリソースをスキャンし、リソースが古くなっていて、現在アプリケーションを使用しているライブアプリケーションがない場合に、リソースを削除します。

共有キャッシュアップローダーとローカライズ

共有キャッシュアップローダーは、ノードマネージャーで実行され、共有キャッシュにリソースを追加するサービスです。 リソースのチェックサムの検証、HDFSへのリソースのアップロード、およびリソースがキャッシュに追加されたことの共有キャッシュマネージャーへの通知を担当します。 アップローダーサービスはコンテナの起動とは非同期であり、yarnアプリケーションの起動をブロックしないことに注意することが重要です。 また、キャッシュへの追加はベストエフォート方式で行われ、実行中のアプリケーションには影響しません。 アップローダーが共有キャッシュにリソースを配置すると、YARNは通常のノードマネージャーのローカライズメカニズムを使用して、アプリケーションがリソースを使用できるようにします。

共有キャッシュを使用したYARNアプリケーションの開発

YARN共有キャッシュをサポートするには、アプリケーションはアプリケーションの送信中に共有キャッシュクライアントを使用する必要があります。 共有キャッシュクライアントは、リソースが共有キャッシュにある場合、そのリソースに対応するURLを返します。 キャッシュされたリソースを使用するには、YARNアプリケーションはキャッシュされたURLを使用してLocalResourceオブジェクトを作成し、アプリケーションの送信中にsetShouldBeUploadedToSharedCacheをtrueに設定します。

たとえば、キャッシュされたURLを使用してLocalResourceを作成する方法は次のとおりです。

String localPathChecksum = sharedCacheClient.getFileChecksum(localPath);
URL cachedResource = sharedCacheClient.use(appId, localPathChecksum);
LocalResource resource = LocalResource.newInstance(cachedResource,
      LocalResourceType.FILE, LocalResourceVisibility.PUBLIC
      size, timestamp, null, true);

共有キャッシュの管理

共有キャッシュの設定

管理者は、次の手順に従って共有キャッシュを初期設定できます。

  1. 共有キャッシュのHDFSディレクトリを作成します(デフォルト:/ sharedcache)。
  2. 共有キャッシュディレクトリのパーミッションを0755に設定します。
  3. 共有キャッシュディレクトリが、共有キャッシュマネージャーデーモンとノードマネージャーを実行するユーザーによって所有されていることを確認します。
  4. yarn-site.xmlファイルで、 *yarn.sharedcache.enabled*をtrueに、 *yarn.sharedcache.root-dir*を手順1で指定したディレクトリに設定します。 その他の構成パラメーターについては、構成パラメーターのセクションを参照してください。
  5. 共有キャッシュマネージャーを起動します。
/hadoop/bin/yarn --daemon start sharedcachemanager

構成パラメータ

構成パラメーターはyarn-default.xmlにあり、yarn-site.xmlファイルに設定する必要があります。 構成パラメーターとそのデフォルト値のリストを以下に示します。

名前 説明 デフォルト値
yarn.sharedcache.enabled 共有キャッシュが有効かどうか false
yarn.sharedcache.root-dir 共有キャッシュのルートディレクトリ /sharedcache
yarn.sharedcache.nested-level チェックサムディレクトリに到達する前のネストされたディレクトリのレベル。 非負でなければなりません。 3
yarn.sharedcache.store.class SCMストアに使用する実装 org.apache.hadoop.yarn.server.sharedcachemanager.store.InMemorySCMStore
yarn.sharedcache.app-checker.class SCMアプリチェッカーに使用する実装 org.apache.hadoop.yarn.server.sharedcachemanager.RemoteAppChecker
yarn.sharedcache.store.in-memory.staleness-period-mins インメモリストア内のリソースは、最後の参照からの時間が失効期間を超えると失効と見なされます。 この値は分単位で指定します。 10080
yarn.sharedcache.store.in-memory.initial-delay-mins デッドイニシャルアプリケーションを削除するための最初のチェックをインメモリストアが実行するまでの初期遅延。 分単位で指定します。 10
yarn.sharedcache.store.in-memory.check-period-mins インメモリストアがデッドイニシャルアプリケーションを削除するためのチェックを実行する頻度。 分単位で指定します。 720
yarn.sharedcache.admin.address SCM(共有キャッシュマネージャー)の管理インターフェースのアドレス 0.0.0.0:8047
yarn.sharedcache.admin.thread-count SCM管理インターフェースの処理に使用されるスレッド数(デフォルトでは1) 1
yarn.sharedcache.webapp.address SCM(共有キャッシュマネージャー)のWebアプリケーションのアドレス 0.0.0.0:8788
yarn.sharedcache.cleaner.period-mins クリーナタスクを実行する頻度。 分単位で指定します。 1440
yarn.sharedcache.cleaner.initial-delay-mins 最初のクリーナタスクがスケジュールされるまでの初期遅延。 分単位で指定します。 10
yarn.sharedcache.cleaner.resource-sleep-ms 各共有キャッシュリソースの処理間にスリープする時間。 ミリ秒単位で指定します。 0
yarn.sharedcache.uploader.server.address SCM(共有キャッシュマネージャー)内のノードマネージャーインターフェースのアドレス 0.0.0.0:8046
yarn.sharedcache.uploader.server.thread-count ノードマネージャーからの共有キャッシュマネージャーリクエストを処理するために使用されるスレッド数(デフォルトは50) 50
yarn.sharedcache.client-server.address SCM(共有キャッシュマネージャー)内のクライアントインターフェースのアドレス 0.0.0.0:8045
yarn.sharedcache.client-server.thread-count クライアントからの共有キャッシュマネージャーリクエストを処理するために使用されるスレッド数(デフォルトは50) 50
yarn.sharedcache.checksum.algo.impl ファイルのチェックサムを計算するために使用されるアルゴリズム(デフォルトはSHA-256) org.apache.hadoop.yarn.sharedcache.ChecksumSHA256Impl
yarn.sharedcache.nm.uploader.replication.factor 共有キャッシュのノードマネージャーアップローダーのレプリケーション係数(デフォルトは10) 10
yarn.sharedcache.nm.uploader.thread-count ノードマネージャーインスタンスからファイルをアップロードするために使用されるスレッド数(デフォルトは20) 20