

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon EMR での分散キャッシュによるファイルのインポート
<a name="emr-plan-input-distributed-cache"></a>

DistributedCache は、マップまたはリデュースタスクで共通のデータにアクセスする必要があるときに効率を高められる Hadoop の機能です。クラスターが依存する既存のアプリケーションまたはバイナリがクラスターの作成時にインストールされていない場合は、DistributedCache を使用するとそれらのファイルをインポートできます。この機能により、クラスターノードは、ファイルを他のクラスターノードから取得する代わりに、ローカルファイルシステムからインポートされたファイルを読み取ることができます。

詳細については、[http://hadoop.apache.org/docs/stable/api/org/apache/hadoop/filecache/DistributedCache.html](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 のパラメータの設定を変更します。詳細については、「[Amazon EMR クラスターで追加のソフトウェアをインストールするブートストラップアクションを作成する](emr-plan-bootstrap.md)」を参照してください。

**Topics**
+ [サポートされているファイルの種類](#emr-dev-supported-file-types)
+ [キャッシュしたファイルの場所](#locationofcache)
+ [ストリーミングアプリケーションからのキャッシュしたファイルへのアクセス](#cachemapper)
+ [ストリーミングアプリケーションからのキャッシュしたファイルへのアクセス](#cacheinconsole)

## サポートされているファイルの種類
<a name="emr-dev-supported-file-types"></a>

DistributedCache では、単一のファイルとアーカイブの両方が使用できます。個別のファイルは、読み取り専用としてキャッシュされます。実行可能ファイルおよびバイナリファイルには、実行許可が設定されます。

アーカイブは、`gzip` などのユーティリティを使用してパッケージ化された 1 つ以上のファイルの集まりです。DistributedCache が圧縮されたファイルを各コアノードに渡し、キャッシュの一部としてアーカイブを解凍します。DistributedCacheは、以下の圧縮形式をサポートしています。
+ zip
+ tgz
+ tar.gz
+ tar
+ jar

## キャッシュしたファイルの場所
<a name="locationofcache"></a>

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 は、ストリーミングを使用するときにのみ使用できます。

## ストリーミングアプリケーションからのキャッシュしたファイルへのアクセス
<a name="cachemapper"></a>

キャッシュしたファイルにマッパーまたはリデューサーアプリケーションからアクセスするには、現在の作業ディレクトリ (./) をアプリケーションのパスに追加し、キャッシュしたファイルが現在の作業ディレクトリにあるかのように参照していることを確認してください。

## ストリーミングアプリケーションからのキャッシュしたファイルへのアクセス
<a name="cacheinconsole"></a>

 AWS マネジメントコンソール および を使用して AWS CLI 、分散キャッシュを使用するクラスターを作成できます。

------
#### [ Console ]

**新しいコンソールで分散キャッシュファイルを指定するには**

1. にサインインし AWS マネジメントコンソール、[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) で Amazon EMR コンソールを開きます。

1. 左側のナビゲーションペインの **[EMR on EC2]** で、**[クラスター]** を選択し、**[クラスターの作成]** を選択します

1. **[ステップ]** で **[ステップの追加]** を選択します。**[ステップの追加]**] ダイアログが開きます。**[引数]** フィールドに、キャッシュに保存するファイルおよびアーカイブを指定します。ファイルのサイズ（またはアーカイブに含まれるファイルのサイズの合計）は、割り当てられているキャッシュサイズ未満でなければなりません。

   個々のファイルを分散キャッシュに追加する場合は、`-cacheFile`、ファイルの名前と場所、ポンド記号 (\$1)、およびファイルをローカルキャッシュに置いたときに付ける名前を順番に指定します。次の例は、個々のファイルを分散キャッシュに追加する方法を示します。

   ```
   -cacheFile \
   s3://amzn-s3-demo-bucket/file-name#cache-file-name
   ```

   アーカイブファイルを分散キャッシュに追加する場合は、`-cacheArchive`、Amazon S3 でのファイルの場所、ポンド記号 (\$1)、およびファイルの集合をローカルキャッシュに置いたときに付ける名前を順番に入力します。次の例は、アーカイブファイルを分散キャッシュに追加する方法を示します。

   ```
   -cacheArchive \
   s3://amzn-s3-demo-bucket/archive-name#cache-archive-name
   ```

   その他のダイアログフィールドに適切な値を入力します。オプションは、ステップタイプによって異なります。ステップを追加してダイアログを終了するには、**[ステップの追加]** を選択します。

1. クラスターに適用するその他のオプションを選択します。

1. クラスターを起動するには、**[クラスターの作成]** を選択します。

------
#### [ CLI ]

**を使用して分散キャッシュファイルを指定するには AWS CLI**
+ クラスターの作成時にストリーミングステップを送信するには、`create-cluster` コマンドを入力し、`--steps` パラメータを指定します。を使用して分散キャッシュファイルを指定するには AWS CLI、ストリーミングステップを送信するときに適切な引数を指定します。

  個々のファイルを分散キャッシュに追加する場合は、`-cacheFile`、ファイルの名前と場所、ポンド記号 (\$1)、およびファイルをローカルキャッシュに置いたときに付ける名前を順番に指定します。

  アーカイブファイルを分散キャッシュに追加する場合は、`-cacheArchive`、Amazon S3 でのファイルの場所、ポンド記号 (\$1)、およびファイルの集合をローカルキャッシュに置いたときに付ける名前を順番に入力します。次の例は、アーカイブファイルを分散キャッシュに追加する方法を示します。

  での Amazon EMR コマンドの使用の詳細については AWS CLI、「」を参照してください[https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr)。

**Example 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` サブコマンドを入力します。

**Example 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` サブコマンドを入力します。

------