YARN共有キャッシュのMRサポート

概要

YARN共有キャッシュのMapReduceサポートにより、MapReduceジョブは追加のリソースキャッシュを利用できます。これにより、ジョブの送信クライアント間だけでなく、YARNクラスタ内でもネットワーク帯域幅が節約されます。これにより、ジョブの送信時間とジョブ全体の実行時間が短縮されます。

共有キャッシュの有効化/無効化

まず、YARNクラスタで共有キャッシュサービスが実行されている必要があります。共有キャッシュサービスの設定方法については、YARNドキュメントを参照してください。

MapReduceユーザーは、リソースタイプに基づいて、共有キャッシュにアップロードできるリソースを指定できます。これは、mapred-site.xmlの構成パラメーターを使用して行います。

<property>
    <name>mapreduce.job.sharedcache.mode</name>
    <value>disabled</value>
    <description>
       A comma delimited list of resource categories to submit to the
       shared cache. The valid categories are: jobjar, libjars, files,
       archives. If "disabled" is specified then the job submission code
       will not use the shared cache.
    </description>
</property>

リソースタイプがリストされている場合、共有キャッシュにリソースが既に存在するかどうかが確認されます。存在する場合は、キャッシュされたリソースが使用されます。そうでない場合は、リソースを非同期的にアップロードする必要があることが指定されます。

キャッシュのリソース指定

MapReduceユーザーは、MapReduceジョブのリソースを指定する3つの方法があります。

  1. 汎用オプションパーサー(例:-files、-archives、-libjars)を介したコマンドライン: コマンドラインを介してリソースが指定され、リソースタイプが共有キャッシュで有効になっている場合、そのリソースは共有キャッシュを使用します。
  2. 分散キャッシュAPI: 分散キャッシュを介してリソースが指定されている場合、リソースタイプが共有キャッシュで有効になっているかどうかに関係なく、リソースは共有キャッシュを使用しません。
  3. 共有キャッシュAPI: これは、org.apache.hadoop.mapreduce.Job APIに追加された新しいメソッドのセットです。これにより、ユーザーは共有キャッシュにファイルを追加したり、共有キャッシュとクラスパスに追加したり、共有キャッシュにアーカイブを追加したりできます。これらのリソースは分散キャッシュに配置され、リソースタイプが有効になっている場合、クライアントも共有キャッシュを使用します。

リソースの命名

MapReduceジョブの各リソースに一意のファイル名があることを確認することが重要です。これにより、MapReduceタスクを実行しているYARNコンテナがコンテナの起動時にローカライズされるときに、シンボリックリンクが上書きされるのを防ぎます。ユーザーは、URIのフラグメント部分を使用して独自のリソース名を指定できます。たとえば、コマンドラインで指定されたファイルリソースの場合、次のようになります。

-files /local/path/file1.txt#foo.txt,/local/path2/file1.txt#bar.txt

上記の例では、file1.txtという名前の2つのファイルが、foo.txtとbar.txtという2つの異なる名前でローカライズされます。

リソースの可視性

共有キャッシュ内のすべてのリソースはPUBLICの可視性を持ちます。

共有キャッシュが利用できない場合のMapReduceクライアントの動作

共有キャッシュマネージャーが利用できない場合、MapReduceクライアントはフェイルファストメカニズムを使用します。MapReduceクライアントが共有キャッシュマネージャーに接続できなかった場合、クライアントはそのジョブ送信の残りの部分で共有キャッシュを使用しなくなります。これにより、MapReduceクライアントが共有キャッシュ内のリソースをチェックしようとするたびにタイムアウトするのを防ぎます。MapReduceクライアントはすぐにデフォルトの動作に戻り、共有キャッシュが最初から有効になっていないかのようにジョブを送信します。