DistributedCache は、マップまたはリデュースタスクで共通のデータにアクセスする必要があるときに効率を高められる Hadoop の機能です。クラスターが依存する既存のアプリケーションまたはバイナリがクラスターの作成時にインストールされていない場合は、DistributedCache を使用することによってそれらのファイルをインポートできます。この機能により、クラスターノードは、ファイルを他のクラスターノードから取得する代わりに、ローカルファイルシステムからインポートされたファイルを読み取ることができます。
詳細については、http://hadoop.apache.org/docs/stable/api/org/apache/hadoop/filecache/DistributedCache.html を参照してください。
クラスターの作成時に DistributedCache を起動します。ファイルは、Hadoop ジョブが起動される直前にキャッシュされ、ジョブが終わるまでキャッシュ内に置かれます。キャッシュしたファイルは、HDFS や Simple Storage Service (Amazon S3) など、Hadoop 対応のファイルシステムに置くことができます。ファイルキャッシュのデフォルトサイズは 10 GB です。キャッシュのサイズを変更するには、local.cache.size
ブートストラップアクションを使用して Hadoop のパラメータの設定を変更します。詳細については、「追加のソフトウェアをインストールするためのブートストラップアクションの作成」を参照してください。
[Supported file types] (サポートされているファイルの種類)
DistributedCache は、単一のファイルとアーカイブの両方で可能です。個別のファイルは、読み取り専用としてキャッシュされます。実行可能ファイルおよびバイナリファイルには、実行許可が設定されます。
アーカイブは、gzip
などのユーティリティを使用して 1 つまたは複数のファイルをパッケージ化したものです。DistributedCache は、キャッシングの一部として、圧縮されたファイルを各コアノードに渡し、アーカイブを解凍します。DistributedCache は、以下の圧縮形式に対応しています。
キャッシュしたファイルの場所
DistributedCache は、ファイルをコアノードのみにコピーします。クラスター内にコアノードが存在しない場合、DistributedCache はファイルをプライマリノードにコピーします。
DistributedCache は、symlink を使用することにより、キャッシュされたファイルをマッパーおよびリデューサーの現在の作業ディレクトリに関連付けます。symlink はファイルの場所のエイリアスであり、実際のファイルの場所ではありません。パラメータの値 (yarn-site.xml
の yarn.nodemanager.local-dirs
) は、一時ファイルの場所を示します。Amazon EMR はこのパラメータを /mnt/mapred
か、またはインスタンスタイプと EMR バージョンに基づいていくつかのバリエーションに設定します。たとえば、インスタンスタイプに 2 つのエフェメラルボリュームが含まれているため、設定に /mnt/mapred
と /mnt1/mapred
が含まれていることがあります。キャッシュファイルは、一時ファイルが置かれる場所のサブディレクトリ /mnt/mapred/taskTracker/archive
に置かれます。
1 つのファイルをキャッシングすると、ファイルは DistributedCache によって archive
ディレクトリに置かれます。アーカイブをキャッシングすると、ファイルは DistributedCache によって解凍され、アーカイブファイルと同じ名前で /archive
内にサブディレクトリが作成されます。各ファイルは、新しいサブディレクトリ内に置かれます。
DistributedCache は、ストリーミングを使用するときにのみ使用できます。
ストリーミングアプリケーションからのキャッシュしたファイルへのアクセス
キャッシュしたファイルにマッパーまたはリデューサーアプリケーションからアクセスするには、現在の作業ディレクトリ (./) をアプリケーションのパスに追加し、キャッシュしたファイルが現在の作業ディレクトリにあるかのように参照していることを確認してください。
ストリーミングアプリケーションからのキャッシュしたファイルへのアクセス
AWS Management Consoleおよび AWS CLI を使用することにより、分散キャッシュを使用するクラスターを作成できます。
Amazon EMR コンソールは、再設計され、使いやすくなりました。古いコンソールと新しいコンソールエクスペリエンスの違いについては、「コンソールの新機能」を参照してください。
- New console
-
新しいコンソールで分散キャッシュファイルを指定するには
-
AWS Management Consoleにサインインし、Amazon EMR コンソール (https://console.aws.amazon.com/emr) を開きます。
-
左側のナビゲーションペインの [EMR on EC2] で、[クラスター] を選択し、[クラスターの作成] を選択します
-
[ステップ] で [ステップの追加] を選択します。[ステップの追加]] ダイアログが開きます。[引数] フィールドに、キャッシュに保存するファイルおよびアーカイブを指定します。ファイルのサイズ(またはアーカイブに含まれるファイルのサイズの合計)は、割り当てられているキャッシュサイズ未満でなければなりません。
個々のファイルを分散キャッシュに追加する場合は、-cacheFile
、ファイルの名前と場所、ポンド記号 (#)、およびファイルをローカルキャッシュに置いたときに付ける名前を順番に指定します。次の例は、個々のファイルを分散キャッシュに追加する方法を示します。
-cacheFile \
s3://DOC-EXAMPLE-BUCKET
/file-name
#cache-file-name
アーカイブファイルを分散キャッシュに追加する場合は、-cacheArchive
、Amazon S3 でのファイルの場所、ポンド記号 (#)、およびファイルの集合をローカルキャッシュに置いたときに付ける名前を順番に入力します。次の例は、アーカイブファイルを分散キャッシュに追加する方法を示します。
-cacheArchive \
s3://DOC-EXAMPLE-BUCKET
/archive-name
#cache-archive-name
その他のダイアログフィールドに適切な値を入力します。オプションは、ステップタイプによって異なります。ステップを追加してダイアログを終了するには、[ステップの追加] を選択します。
-
クラスターに適用するその他のオプションを選択します。
-
クラスターを起動するには、[クラスターの作成] を選択します。
- Old console
-
古いコンソールで分散キャッシュファイルを指定するには
新しい Amazon EMR コンソールに移動し、サイドナビゲーションから [古いコンソールに切り替え] を選択します。古いコンソールに切り替えたときの動作の詳細については、「Using the old console」を参照してください。
-
[Create cluster] (クラスターを作成) を選択します。
-
起動モードとして [Step execution (ステップ実行)] を選択します。
-
[ステップ] セクションの [Add step (ステップの追加)] フィールドで、リストから [Streaming program (ストリーミングプログラム)] を選択し、[Configure and add (設定と追加)] をクリックします。
-
[引数] フィールドに、キャッシュに保存するファイルおよびアーカイブを指定し、[追加] を選択します。ファイルのサイズ(またはアーカイブに含まれるファイルのサイズの合計)は、割り当てられているキャッシュサイズ未満でなければなりません。
個々のファイルを分散キャッシュに追加する場合は、-cacheFile
、ファイルの名前と場所、ポンド記号 (#)、およびファイルをローカルキャッシュに置いたときに付ける名前を順番に指定します。次の例は、個々のファイルを分散キャッシュに追加する方法を示します。
-cacheFile \
s3://DOC-EXAMPLE-BUCKET
/file_name#cache_file_name
アーカイブファイルを分散キャッシュに追加する場合は、-cacheArchive
、Amazon S3 でのファイルの場所、ポンド記号 (#)、およびファイルの集合をローカルキャッシュに置いたときに付ける名前を順番に入力します。次の例は、アーカイブファイルを分散キャッシュに追加する方法を示します。
-cacheArchive \
s3://DOC-EXAMPLE-BUCKET
/archive_name#cache_archive_name
-
クラスターの設定と起動に進みます。クラスターでは、キャッシュの場所にファイルをコピーしてから、クラスターステップを処理します。
- CLI
-
AWS CLI で分散キャッシュファイルを指定するには
-
クラスターの作成時にストリーミングステップを送信するには、create-cluster
コマンドを入力し、--steps
パラメータを指定します。AWS CLI を使用して分散キャッシュファイルを指定するには、ストリーミングステップを送信するときに適切な引数を指定します。
個々のファイルを分散キャッシュに追加する場合は、-cacheFile
、ファイルの名前と場所、ポンド記号 (#)、およびファイルをローカルキャッシュに置いたときに付ける名前を順番に指定します。
アーカイブファイルを分散キャッシュに追加する場合は、-cacheArchive
、Amazon S3 でのファイルの場所、ポンド記号 (#)、およびファイルの集合をローカルキャッシュに置いたときに付ける名前を順番に入力します。次の例は、アーカイブファイルを分散キャッシュに追加する方法を示します。
AWS CLI での Amazon EMR コマンドの使用の詳細については、「https://docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。
例 1
次のコマンドを入力して、クラスターを起動し、ストリーミングステップを送信します。このコマンドでは -cacheFile
を使用して、sample_dataset_cached.dat
というファイルをキャッシュに追加します。
aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 --applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,Args=["--files","s3://my_bucket/my_mapper.py s3://my_bucket/my_reducer.py","-mapper","my_mapper.py","-reducer","my_reducer.py,"-input","s3://my_bucket/my_input","-output","s3://my_bucket/my_output", "-cacheFile","s3://my_bucket/sample_dataset.dat#sample_dataset_cached.dat"]
--instance-groups
パラメータを使用せずにインスタンス数を指定すると、1 つのプライマリノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、コマンドで指定したインスタンスタイプが使用されます。
以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成していない場合は、「aws emr
create-default-roles
」と入力してそれらを作成してから、create-cluster
サブコマンドを入力します。
例 2
次のコマンドでは、ストリーミングクラスターを作成し、-cacheArchive
を使用してファイルのアーカイブを 1 つキャッシュに追加しています。
aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 --applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,Args=["--files","s3://my_bucket/my_mapper.py s3://my_bucket/my_reducer.py","-mapper","my_mapper.py","-reducer","my_reducer.py,"-input","s3://my_bucket/my_input","-output","s3://my_bucket/my_output", "-cacheArchive","s3://my_bucket/sample_dataset.tgz#sample_dataset_cached"]
--instance-groups
パラメータを使用せずにインスタンス数を指定すると、1 つのプライマリノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、コマンドで指定したインスタンスタイプが使用されます。
以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成していない場合は、「aws emr
create-default-roles
」と入力してそれらを作成してから、create-cluster
サブコマンドを入力します。