YARN共有キャッシュは、共有アプリケーションリソースをHDFSに安全かつスケーラブルな方法でアップロードおよび管理する機能を提供します。 YARNアプリケーションは、他のアプリケーションまたは同じアプリケーションの以前の実行によってアップロードされたリソースを、同一のファイルを複数回再アップロードおよびローカライズすることなく活用できます。 これにより、ネットワークリソースが節約され、YARNアプリケーションの起動時間が短縮されます。
現在、YARN共有キャッシュはリリースされ、すぐに使用できる状態になっています。 主要コンポーネントは実装済みであり、大規模な本番環境にデプロイされています。 まだいくつかの機能が不足しています(強力な認証など)。 これらの不足している機能は、フォローアップのフェーズ2の取り組みの一環として実装されます。 詳細については、YARN-7282を参照してください。
共有キャッシュ機能は、4つの主要コンポーネントで構成されています。
YARNアプリケーションの開発者とユーザーは、共有キャッシュクライアントを使用して共有キャッシュと対話する必要があります。 このクライアントは、共有キャッシュマネージャーとの対話、アプリケーションリソースのチェックサムの計算、および共有キャッシュ内のアプリケーションリソースの要求を担当します。 アプリケーションがリソースを要求すると、アプリケーションのライフサイクル boyunca そのリソースを自由に使用できます。 詳細なドキュメントについては、SharedCacheClient.java javadocを参照してください。
共有キャッシュHDFSディレクトリには、すべての共有キャッシュリソースが格納されます。 HDFSパーミッションによって保護されており、グローバルに読み取り可能ですが、書き込みは信頼できるユーザーに制限されています。 このHDFSディレクトリは、共有キャッシュマネージャーとノードマネージャーのリソースアップローダーによってのみ変更されます。 リソースは、リソースのチェックサムを使用して、一連のサブディレクトリに分散されます。
/sharedcache/a/8/9/a896857d078/foo.jar /sharedcache/5/0/f/50f11b09f87/bar.jar /sharedcache/a/6/7/a678cb1aa8f/job.jar
共有キャッシュマネージャーは、クライアントからのリクエストの処理と共有キャッシュの内容の管理を担当します。 メタデータとHDFSに永続化されたリソースの両方を管理します。 バックエンドストアとクリーナーサービスの2つの主要コンポーネントで構成されています。 SCMは、クラスター内の任意のノードに配置できる個別のデーモンプロセスとして実行されます。 これにより、管理者は他のYARNコンポーネント(リソースマネージャーやノードマネージャーなど)に影響を与えることなく、SCMを起動/停止/アップグレードできます。
バックエンドストアは、共有キャッシュに関するメタデータの維持と永続化を担当します。 これには、キャッシュ内のリソース、リソースが最後に使用された日時、および現在リソースを使用しているアプリケーションのリストが含まれます。 バッキングストアの実装はプラグイン可能であり、現在は再起動後に状態を再作成するインメモリストアを使用しています。
クリーナーサービスは、使用されなくなったリソースがキャッシュから削除されるようにすることで、HDFSに永続化されたリソースを維持します。 定期的にキャッシュ内のリソースをスキャンし、リソースが古くなっていて、現在アプリケーションを使用しているライブアプリケーションがない場合に、リソースを削除します。
共有キャッシュアップローダーは、ノードマネージャーで実行され、共有キャッシュにリソースを追加するサービスです。 リソースのチェックサムの検証、HDFSへのリソースのアップロード、およびリソースがキャッシュに追加されたことの共有キャッシュマネージャーへの通知を担当します。 アップローダーサービスはコンテナの起動とは非同期であり、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);
管理者は、次の手順に従って共有キャッシュを初期設定できます。
/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 |