

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

# Amazon EMR で処理する入力データを準備する
<a name="emr-plan-input"></a>

大部分のクラスターは入力データを読み込んで、そのデータを処理します。データを読み込むには、該当するデータが、クラスターでアクセスできる場所に位置し、かつクラスターで処理できる形式になっている必要があります。最も一般的なシナリオは、入力データを Simple Storage Service (Amazon S3) にアップロードすることです。Amazon EMR には、クラスターが Simple Storage Service (Amazon S3) からデータをインポートまたは読み取るためのツールが用意されています。

Hadoop におけるデフォルトの入力形式はテキストファイルです。ただし、Hadoop をカスタマイズすれば、他の形式で格納されているデータをインポートできます。

**Topics**
+ [Amazon EMR が受け入れることができる入力のタイプ](emr-plan-input-accept.md)
+ [Amazon EMR にデータを取得するさまざまな方法](emr-plan-get-data-in.md)

# Amazon EMR が受け入れることができる入力のタイプ
<a name="emr-plan-input-accept"></a>

クラスターのデフォルトの入力形式は、各行が改行 (\$1n) 文字で区切られているテキストファイルです。これは、最もよく使用される入力形式です。

入力データがデフォルトのテキストファイル以外の形式である場合は、Hadoop インターフェイス `InputFormat` を使用して他の入力の種類を指定できます。カスタムデータの種類を処理するために、`FileInputFormat` クラスのサブクラスを作成することもできます。詳細については、[http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/InputFormat.html](http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/InputFormat.html) を参照してください。

Hive を使用している場合は、シリアライザー/デシリアライザー（SerDe）を使用して、所与の形式のデータを HDFS に読み込むことができます。詳細については、[https://cwiki.apache.org/confluence/display/Hive/SerDe](https://cwiki.apache.org/confluence/display/Hive/SerDe) を参照してください。

# Amazon EMR にデータを取得するさまざまな方法
<a name="emr-plan-get-data-in"></a>

Amazon EMR では、複数の方法でデータをクラスターに配置することができます。最も一般的な方法は、Simple Storage Service (Amazon S3) にデータをアップロードし、Amazon EMR の組み込み機能を使用してクラスターにデータをロードするというものです。また、Hadoop の DistributedCache 機能を使用して、分散ファイルシステムからローカルファイルシステムにファイルを転送することもできます。Amazon EMR によって提供される Hive (Hive バージョン 0.7.1.1 以降) の実装には、DynamoDB と Amazon EMR クラスターの間でデータのインポートおよびエクスポートを行う場合に使用できる機能が含まれています。処理する社内データが大量にある場合、 Direct Connect サービスが役に立つ場合があります。

**Topics**
+ [データを Simple Storage Service (Amazon S3) にアップロードする](emr-plan-upload-s3.md)
+ [を使用してデータをアップロードする AWS DataSync](emr-plan-upload-datasync.md)
+ [Amazon EMR での分散キャッシュによるファイルのインポート](emr-plan-input-distributed-cache.md)
+ [Amazon EMR を使用した圧縮ファイルの検出と処理](HowtoProcessGzippedFiles.md)
+ [Amazon EMR を使用して DynamoDB データを Hive にインポートする](emr-plan-input-dynamodb.md)
+ [Amazon EMR AWS Direct Connect から を使用してデータに接続する](emr-plan-input-directconnect.md)
+ [を使用して Amazon EMR の大量のデータをアップロードする AWS Snowball Edge](emr-plan-input-snowball.md)

# データを Simple Storage Service (Amazon S3) にアップロードする
<a name="emr-plan-upload-s3"></a>

Simple Storage Service (Amazon S3) バケットにファイルをアップロードする方法については、「*Amazon Simple Storage Service ユーザーガイド*」の「[バケットにオブジェクトを追加する](https://docs.aws.amazon.com/AmazonS3/latest/userguide/PuttingAnObjectInABucket.html)」を参照してください。Hadoop での Simple Storage Service (Amazon S3) の使用の詳細については、[http://wiki.apache.org/hadoop/AmazonS3](http://wiki.apache.org/hadoop2/AmazonS3) を参照してください。

**Topics**
+ [Amazon S3 バケットの作成と設定](#create-s3-bucket-input)
+ [Simple Storage Service (Amazon S3) 用のマルチパートアップロードを設定する](#Config_Multipart)
+ [ベストプラクティス](#emr-bucket-bestpractices)
+ [Amazon S3 Express One Zone にデータをアップロードする](emr-express-one-zone.md)

## Amazon S3 バケットの作成と設定
<a name="create-s3-bucket-input"></a>

Amazon EMR は、Amazon S3 AWS SDK for Java で を使用して、入力データ、ログファイル、および出力データを保存します。Simple Storage Service (Amazon S3) は、これらのストレージロケーションを*バケット*として参照します。バケットには、Simple Storage Service (Amazon S3) と DNS の要件に従って一定の制約と制限があります。詳細については、「*Amazon Simple Storage Service ユーザーガイド*」の「[バケットの制約と制限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html)」を参照してください。

このセクションでは、Amazon S3 AWS マネジメントコンソール を使用して Amazon S3 バケットのアクセス許可を作成して設定する方法について説明します。また、Simple Storage Service (Amazon S3) API または AWS CLIを使用して、Simple Storage Service (Amazon S3) バケットのアクセス許可を作成および設定できます。変更と共に curl を使用して、Simple Storage Service (Amazon S3) の適切な認証パラメータを渡すこともできます。

以下のリソースを参照してください。
+ コンソールを使用してバケットを作成する方法については、「*Simple Storage Service (Amazon S3) ユーザーガイド*」の「[バケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html)」を参照してください。
+ を使用してバケットを作成および操作するには AWS CLI、「Amazon [S3 ユーザーガイド」の「 で高レベルの S3 コマンドを使用する AWS Command Line Interface](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-s3-commands.html)」を参照してください。 *Amazon S3 *
+ SDK を使用してバケットを作成する方法については、「*Amazon Simple Storage Service ユーザーガイド*」の「[バケットを作成する例](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-get-location-example.html)」を参照してください。
+ curl を使用してバケットを操作する方法については、「[curl 用の Simple Storage Service (Amazon S3) 認証ツール](https://aws.amazon.com/code/amazon-s3-authentication-tool-for-curl/)」を参照してください。
+ リージョンの詳細については、「*Amazon Simple Storage Service ユーザーガイド*」の「[バケットへのアクセス](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html#access-bucket-intro)」を参照してください。
+ Amazon S3 Access Points を使用してバケットで作業する方法については、「*Simple Storage Service (Amazon S3) ユーザーガイド*の「[アクセスポイントでのバケット形式のエイリアスの使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-alias.html)」を参照してください。Simple Storage Service (Amazon S3) バケット名の代わりに、Amazon S3 Access Points と Amazon S3 Access Points のエイリアスを合わせて簡単に使用できます。Simple Storage Service (Amazon S3) アクセスポイントのエイリアスは、既存アプリケーションと新しいアプリケーションの両方 (Spark、Hive、Presto など) に使用できます。

**注記**  
バケットのロギングを有効にした場合、有効になるのはバケットアクセスログのみです。Amazon EMR クラスターログは有効にはなりません。

バケットの作成中またはそれ以降に、アプリケーションに応じてバケットにアクセスするための適切なアクセス許可を設定できます。一般的に、お客様自身（オーナー）に読み書きのアクセス、認証されたユーザーに対しては読み込みアクセスを付与します。

クラスターを作成するには、必要な Simple Storage Service (Amazon S3) バケットが存在していなければなりません。クラスターで参照される必要なスクリプトまたはデータはすべて、Simple Storage Service (Amazon S3) にアップロードする必要があります。

## Simple Storage Service (Amazon S3) 用のマルチパートアップロードを設定する
<a name="Config_Multipart"></a>

Amazon EMR は AWS SDK for Java による Amazon S3 マルチパートアップロードをサポートしています。マルチパートアップロードを使用すると、単一のオブジェクトをパートのセットとしてアップロードすることができます。これらのオブジェクトパートは、任意の順序で個別にアップロードできます。いずれかのパートの送信が失敗すると、他のパートに影響を与えることなくそのパートを再送することができます。オブジェクトのすべてのパートがアップロードされたら、Simple Storage Service (Amazon S3) はこれらのパートを組み立ててオブジェクトを作成します。

詳細については、[Amazon Simple Storage Service ユーザーガイド](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html)の*マルチパートアップロードの概要*を参照してください。

さらに、Amazon EMR には、失敗したマルチパートアップロードのパートのクリーンアップをより正確に制御できるプロパティも用意されています。

マルチパートアップロードのための Amazon EMR の設定プロパティを次の表で説明します。これらは、`core-site` 設定分類を使用して設定することができます。詳細については、「*Amazon EMR リリースガイド*」の「[アプリケーションの設定](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/configure-apps.html)」を参照してください。


| 設定パラメータ名 | デフォルトの値 | 説明 | 
| --- | --- | --- | 
| fs.s3n.multipart.uploads.enabled | true | マルチパートアップロードを有効にするかどうかを示すブールタイプ。EMRFS の整合性のあるビューが有効になっていると、マルチパートアップロードがデフォルトで有効になっており、この値を false に設定しても無視されます。 | 
| fs.s3n.multipart.uploads.split.size | 134217728 | マルチパートアップロードが有効になっている場合に、EMRFS で新しいパートのアップロードを開始する前に、パートの最大サイズ (バイト単位) を指定します。最小値は `5242880` (5 MB) です。指定した値が小さい場合は、`5242880` が使用されます。最大数は `5368709120` (5 GB) です。指定した値が大きい場合は、`5368709120` が使用されます。 EMRFS のクライアント側で暗号化が無効になっていて、Simple Storage Service (Amazon S3) 向けに最適化されたコミッターも無効になっている場合は、この値によって、EMRFS でファイルのアップロードに `PutObject` リクエストではなくマルチパートアップロードを使用するようになるまでの、許容されるデータファイルの最大サイズも制御されます。詳細については、「」を参照してください。 | 
| fs.s3n.ssl.enabled | true | http と https のどちらを使用するかを示すブールタイプです。 | 
| fs.s3.buckets.create.enabled | false | バケットが存在しない場合に作成する必要があるかどうかを示すブールタイプです。false に設定すると、CreateBucket 操作で例外が発生します。 | 
| fs.s3.multipart.clean.enabled | false | 未完了のマルチパートアップロードの定期的なバックグラウンドクリーンアップを有効にするかどうかを示すブールタイプです。 | 
| fs.s3.multipart.clean.age.threshold | 604800 | マルチパートアップロードがクリーンアップの対象となるまでの最小期間 (秒単位) を指定する long 型です。デフォルトは 1 週間です。 | 
| fs.s3.multipart.clean.jitter.max | 10000 | 次回クリーンアップをスケジュールする前の 15 分間の固定遅延に追加するランダムのジッター遅延時間 (秒単位) の最大数を指定する整数型です。 | 

### マルチパートアップロードの無効化
<a name="emr-dev-multipart-upload"></a>

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

**コンソールでマルチパートアップロードを無効にするには**

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

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

1. **[ソフトウェアの設定]** の下で、次の設定を入力します: `classification=core-site,properties=[fs.s3n.multipart.uploads.enabled=false]`。

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

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

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

**を使用してマルチパートアップロードを無効にするには AWS CLI**

この手順では、 AWS CLIを使用してマルチパートアップロードを無効にする方法を説明します。マルチパートアップロードを無効にするには、`create-cluster` コマンドを入力し、`--bootstrap-actions` パラメータを指定します。

1. 次の内容で `myConfig.json` ファイルを作成してコマンドを実行するのと同じディレクトリに保存します。

   ```
   [
     {
       "Classification": "core-site",
       "Properties": {
         "fs.s3n.multipart.uploads.enabled": "false"
       }
     }
   ]
   ```

1. 次のコマンドを入力し、*myKey* を EC2 キーペアの名前に置き換えます。
**注記**  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

   ```
   1. aws emr create-cluster --name "Test cluster" \
   2. --release-label emr-7.12.0 --applications Name=Hive Name=Pig \
   3. --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge \
   4. --instance-count 3 --configurations file://myConfig.json
   ```

------
#### [ API ]

**API を使用してマルチパートアップロードを無効にするには**
+ プログラムによる Simple Storage Service (Amazon S3) マルチパートアップロードについては、「*Amazon Simple Storage Service ユーザーガイド*」の「[マルチパートアップロードに AWS SDK for Java を使用する](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMPDotJavaAPI.html)」を参照してください。

   AWS SDK for Java の詳細については、[AWS 「 SDK for Java](https://aws.amazon.com/sdkforjava/)」を参照してください。

------

## ベストプラクティス
<a name="emr-bucket-bestpractices"></a>

EMR クラスターで Simple Storage Service (Amazon S3) バケットを使用するための推奨事項を次に示します。

### バージョニングの有効化
<a name="emr-enable-versioning"></a>

バージョニングは、Amazon S3 バケット用の推奨設定です。バージョニングを有効にすると、データが誤って削除または上書きされても復元できます。詳細については、「Amazon Simple Storage Service ユーザーガイド」の「[バージョニングの使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html)」を参照してください。

### 失敗したマルチパートアップロードをクリーンアップする
<a name="emr-multipart-cleanup"></a>

EMR クラスターコンポーネントは、Amazon S3 API で AWS SDK for Java を介したマルチパートアップロードを使用して、デフォルトでログファイルと出力データを Amazon S3 に書き込みます。 APIs Amazon EMR を使用した、この設定に関連するプロパティの変更の詳細については、「[Simple Storage Service (Amazon S3) 用のマルチパートアップロードを設定する](#Config_Multipart)」を参照してください。大きなファイルのアップロードでは、Simple Storage Service (Amazon S3) マルチパートアップロードが未完了になることがあります。マルチパートアップロードを正常に完了できないと、進行中のマルチパートアップロードによって継続的にバケットが使用され、ストレージ料金が発生します。過剰なファイルストレージを避けるために以下のオプションをお勧めします。
+ Amazon EMR で使用するバケットについては、Simple Storage Service (Amazon S3) でライフサイクル設定ルールを使用して、アップロードの開始日から 3 日後に未完了のマルチパートアップロードを削除します。ライフサイクル設定ルールを使用すると、オブジェクトのストレージクラスと有効期限を制御できます。詳細については、「[オブジェクトのライフサイクル管理](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)」および「[バケットライフサイクルポリシーを使用した不完全なマルチパートアップロードの中止](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config)」を参照してください。
+ `fs.s3.multipart.clean.enabled` を `true` に設定し、他のクリーンアップパラメータをチューニングすることで、Amazon EMR のマルチパートクリーンアップ機能を有効にします。この機能は、大容量、大規模、および稼働時間が限られているクラスターで便利です。この場合は、ライフサイクル設定ルールの `DaysAfterIntitiation` パラメータが、最小に設定しても長すぎるため、Simple Storage Service (Amazon S3) ストレージでスパイクを発生させています。Amazon EMR のマルチパートクリーンアップでは、より正確に制御できます。詳細については、「[Simple Storage Service (Amazon S3) 用のマルチパートアップロードを設定する](#Config_Multipart)」を参照してください。

### バージョンマーカーを管理する
<a name="w2aac28c11c17c11b7c11b9"></a>

Simple Storage Service (Amazon S3) でライフサイクル設定ルールを有効にして、Amazon EMR で使用するバージョニング対応バケットについて期限切れのオブジェクト削除マーカーを削除することをお勧めします。バージョニング対応のバケットからオブジェクトを削除すると、削除マーカーが作成されます。オブジェクトの以前のバージョンすべてがその後有効期限切れになると、有効期限が切れたオブジェクトの削除マーカー 1 つがバケット内に残ります。これらの削除マーカーに対する料金はかかりませんが、期限切れのマーカーを削除すると LIST リクエストのパフォーマンスが向上する可能性があります。詳細については、「Amazon Simple Storage Service ユーザーガイド」の「[バージョニングが有効なバケットのライフサイクル設定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configuration-bucket-with-versioning.html)」を参照してください。

### パフォーマンスに関するベストプラクティス
<a name="w2aac28c11c17c11b7c11c11"></a>

EMR クラスターやこれらのクラスターのアプリケーションでは、使い方やワークロードに応じて、バケットに対する多数のリクエストが発生することがあります。詳細については、「*Amazon Simple Storage Service ユーザーガイド*」の「[リクエスト率とパフォーマンスに関する考慮事項](https://docs.aws.amazon.com/AmazonS3/latest/userguide/request-rate-perf-considerations.html)」を参照してください。

# Amazon S3 Express One Zone にデータをアップロードする
<a name="emr-express-one-zone"></a>

## 概要:
<a name="emr-express-one-zone-overview"></a>

Amazon EMR 6.15.0 以降では、Amazon EMR と Apache Spark を [Amazon S3 Express One Zone](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-one-zone.html) ストレージクラスと組み合わせて使用することで、Spark ジョブのパフォーマンスを向上させることができます。Amazon EMR リリース 7.2.0 以降では、HBase、Flink、Hive もサポートされているため、これらのアプリケーションを使用する場合、S3 Express One Zone のメリットも享受できます。*S3 Express One Zone* は、1 秒間に数十万件単位のリクエストによりデータに頻繁にアクセスするようなアプリケーション用の S3 ストレージクラスです。リリース時点で、S3 Express One Zone は、Amazon S3 の中でレイテンシーが最も低く、パフォーマンスの最も高いクラウドオブジェクトストレージを提供しています。

## 前提条件
<a name="emr-express-one-zone-prereqs"></a>
+ **S3 Express One Zone のアクセス許可** - S3 Express One Zone が S3 オブジェクトに対して `GET`、`LIST`、`PUT` などのアクションを最初に実行すると、ストレージクラスがユーザーに代わって `CreateSession` を呼び出します。S3A コネクタが `CreateSession` API を呼び出せるように、お使いの IAM ポリシーで `s3express:CreateSession` アクセス許可を付与する必要があります。このアクセス許可ポリシーの例については、「[Amazon S3 Express One Zone の使用を開始する](#emr-express-one-zone-start)」を参照してください。
+ **S3A コネクタ** - S3 Express One Zone ストレージクラスを使用する Amazon S3 バケットのデータにアクセスするように Spark クラスターを設定するには、Apache Hadoop コネクタ S3A を使用する必要があります。コネクタを使用するには、すべての S3 URI が `s3a` スキームを使用していることを確認してください。使用していない場合は、`s3` スキームと `s3n` スキーム用にファイルシステム実装を変更してください。

`s3` スキームを変更するには、以下のクラスター設定を指定します。

```
[
  {
    "Classification": "core-site",
    "Properties": {
      "fs.s3.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem",
      "fs.AbstractFileSystem.s3.impl": "org.apache.hadoop.fs.s3a.S3A"
    }
  }
]
```

`s3n` スキームを変更するには、以下のクラスター設定を指定します。

```
[
  {
    "Classification": "core-site",
    "Properties": {
      "fs.s3n.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem",
      "fs.AbstractFileSystem.s3n.impl": "org.apache.hadoop.fs.s3a.S3A"
    }
  }
]
```

## Amazon S3 Express One Zone の使用を開始する
<a name="emr-express-one-zone-start"></a>

**Topics**
+ [アクセス権ポリシーを作成する](#emr-express-one-zone-permissions)
+ [クラスターを作成および設定する](#emr-express-one-zone-create)
+ [設定の概要](#emr-express-one-zone-configs)

### アクセス権ポリシーを作成する
<a name="emr-express-one-zone-permissions"></a>

Amazon S3 Express One Zone を使用するクラスターを作成する前に、クラスターの Amazon EC2 インスタンスプロファイルにアタッチする IAM ポリシーを作成する必要があります。ポリシーには S3 Express One Zone ストレージクラスにアクセスするためのアクセス許可が必要です。次のポリシー例は、必要なアクセス許可を付与する方法を示します。ポリシーを作成したら、[クラスターを作成および設定する](#emr-express-one-zone-create) セクションで説明されているように、お使いの EMR クラスターの作成に使用するインスタンスプロファイルロールにポリシーをアタッチします。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3express:*:123456789012:bucket/example-s3-bucket"
      ],
      "Action": [
        "s3express:CreateSession"
      ],
      "Sid": "AllowS3EXPRESSCreatesession"
    }
  ]
}
```

------

### クラスターを作成および設定する
<a name="emr-express-one-zone-create"></a>

次に、S3 Express One Zone で Spark、HBase、Flink、または Hive を実行するクラスターを作成します。以下の手順では、 AWS マネジメントコンソールにクラスターを作成するための大まかな概要を説明します。

1. Amazon EMR コンソールに移動し、サイドバーから **[クラスター]** を選択します。次に、**[クラスターを作成]** を選択します。

1. Spark を使用する場合は、Amazon EMR リリース `emr-6.15.0` 以降を選択します。HBase、Flink、または Hive を使用する場合は、`emr-7.2.0` 以上を選択します。

1. Spark、HBase、Flink など、クラスターに含めるアプリケーションを選択します。

1. Amazon S3 Express One Zone を有効にするには、**[ソフトウェア設定]** セクションで次の例のような設定を入力します。設定と推奨値については、この手順の後の [設定の概要](#emr-express-one-zone-configs) セクションで説明しています。

   ```
   [
     {
       "Classification": "core-site",
       "Properties": {
         "fs.s3a.aws.credentials.provider": "software.amazon.awssdk.auth.credentials.InstanceProfileCredentialsProvider",
         "fs.s3a.change.detection.mode": "none",
         "fs.s3a.endpoint.region": "aa-example-1",
         "fs.s3a.select.enabled": "false"
       }
     },
     {
       "Classification": "spark-defaults",
       "Properties": {
         "spark.sql.sources.fastS3PartitionDiscovery.enabled": "false"
       }
     }
   ]
   ```

1. **[Amazon EMR 用 EC2 インスタンスプロファイル]** セクションで、既存のロールを使用するように選択し、上記の [アクセス権ポリシーを作成する](#emr-express-one-zone-permissions) セクションで作成したポリシーがアタッチされたロールを使用します。

1. 残りのクラスター設定をアプリケーションに合わせて設定し、**[クラスターを作成]** を選択します。

### 設定の概要
<a name="emr-express-one-zone-configs"></a>

次の表では、[クラスターを作成および設定する](#emr-express-one-zone-create) セクションで説明されているように、Amazon EMR で S3 Express One Zone を使用するクラスターをセットアップするときに指定する必要がある設定と推奨値について説明しています。

**S3A 設定**


| パラメータ | デフォルト値 | 推奨値 | 説明 | 
| --- | --- | --- | --- | 
|  `fs.s3a.aws.credentials.provider`  |  指定しない場合は、`TemporaryAWSCredentialsProvider`、`SimpleAWSCredentialsProvider`、`EnvironmentVariableCredentialsProvider`、`IAMInstanceCredentialsProvider` の順序で `AWSCredentialProviderList` が使用されます。  |  <pre>software.amazon.awssdk.auth.credentials.InstanceProfileCredentialsProvider</pre>  |  Amazon EMR インスタンスプロファイルロールには、S3A ファイルシステムが `s3express:CreateSession` を呼び出すことを許可するポリシーが必要です。S3 Express One Zone のアクセス許可があれば、他の認証情報プロバイダーも機能します。  | 
|  `fs.s3a.endpoint.region`  |  null  |  バケットを作成した AWS リージョン 。  |  リージョン解決ロジックは S3 Express One Zone ストレージクラスでは機能しません。  | 
|  `fs.s3a.select.enabled`  |  `true`  |  `false`  |  Amazon S3 `select` は S3 Express One Zone ストレージクラスではサポートされていません。  | 
|  `fs.s3a.change.detection.mode`  |  `server`  |  なし  |  S3A による変更検出は、MD5 ベースの `etags` をチェックすることで動作します。S3 Express One Zone ストレージクラスは MD5 `checksums` をサポートしていません。  | 

**Spark 設定**


| パラメータ | デフォルト値 | 推奨値 | 説明 | 
| --- | --- | --- | --- | 
|  `spark.sql.sources.fastS3PartitionDiscovery.enabled`  |  `true`  |  false  |  内部最適化は、S3 Express One Zone ストレージクラスではサポートされていない S3 API パラメータを使用します。  | 

**Hive 設定**


| パラメータ | デフォルト値 | 推奨値 | 説明 | 
| --- | --- | --- | --- | 
|  `hive.exec.fast.s3.partition.discovery.enabled`  |  `true`  |  false  |  内部最適化は、S3 Express One Zone ストレージクラスではサポートされていない S3 API パラメータを使用します。  | 

## 考慮事項
<a name="emr-express-one-zone-considerations"></a>

Amazon EMR 上の Apache Spark を S3 Express One Zone ストレージクラスと統合する場合は、次の点を考慮してください。
+ Amazon EMR で S3 Express One Zone を使用するには、S3A コネクタが必要です。S3 Express One Zone との通信に必要な機能とストレージクラスを備えているのは S3A だけです。コネクタを設定する手順については、「[前提条件](#emr-express-one-zone-prereqs)」を参照してください。
+ Amazon S3 Express One Zone ストレージクラスは SSE-S3 および SSE-KMS の暗号化をサポートします。詳細については、「[サーバー側の暗号化によるデータの保護](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-data-protection.html#s3-express-ecnryption)」を参照してください。
+ Amazon S3 Express One Zone ストレージクラスは S3A `FileOutputCommitter` での書き込みをサポートしていません。S3 Express One Zone のバケットに S3A `FileOutputCommitter` を使用して書き込みを行うと、エラー *InvalidStorageClass: The storage class you specified is not valid* が発生します。
+ EMR on EC2 では、Amazon S3 Express One Zone は、Amazon EMR リリース 6.15.0 以降でサポートされています。さらに、Amazon EMR リリース 7.2.0 以降では、Amazon EMR on EKS および Amazon EMR Serverless でサポートされています。

# を使用してデータをアップロードする AWS DataSync
<a name="emr-plan-upload-datasync"></a>

AWS DataSync は、オンプレミスストレージとストレージサービス間、または AWS ストレージサービス間でデータを移動するプロセスを簡素化、自動化、高速化するオンラインデータ転送 AWS サービスです。DataSync は、Hadoop Distributed File System (HDFS)、NAS ファイルサーバー、セルフマネージドオブジェクトストレージなど、さまざまなオンプレミスストレージシステムをサポートします。

クラスターにデータを入力する最も一般的な方法は、Simple Storage Service (Amazon S3) にデータをアップロードし、Amazon EMR の組み込み機能を使用してクラスターにデータをロードするというものです。

DataSync は、次のタスクの実行に役立ちます。
+ ビジネス継続性を実現するために、Hadoop クラスター上の HDFS を Simple Storage Service (Amazon S3) にレプリケートする
+ HDFS を Simple Storage Service (Amazon S3) にコピーして、データレイクに入力する
+ 分析と処理のために Hadoop クラスターの HDFS と Simple Storage Service (Amazon S3) の間でデータを転送する

S3 バケットにデータをアップロードするには、まずオンプレミスストレージと同じネットワークに 1 つ以上の DataSync エージェントをデプロイします。*エージェント*は、セルフマネージドの場所からデータを読み取ったり、そこにデータを書き込むために使用される仮想マシン (VM) です。次に、S3 バケット AWS リージョン がある AWS アカウント および でエージェントをアクティブ化します。

エージェントがアクティブ化されたら、オンプレミスストレージの送信元の場所、S3 バケットの送信先の場所、およびタスクを作成します。*タスク*は、2 つの場所 (送信元と送信先) からなる一式とタスクの動作を制御するために使用する一連のデフォルトオプションです。

最後に、DataSync タスクを実行して、送信元から送信先までデータを転送します。

詳細については、「[AWS DataSyncの開始方法](https://docs.aws.amazon.com/datasync/latest/userguide/getting-started.html)」を参照してください。

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

------

# Amazon EMR を使用した圧縮ファイルの検出と処理
<a name="HowtoProcessGzippedFiles"></a>

Hadoop は、ファイル拡張子をチェックして圧縮ファイルを検出します。Hadoop でサポートされている圧縮タイプは、gzip、bzip2、LZO です。これらのタイプの圧縮を使用してファイルを抽出する際は、追加のアクションは不要です。Hadoop が処理します。

LZO ファイルのインデックスを作成するには、[https://github.com/kevinweil/hadoop-lzo](https://github.com/kevinweil/hadoop-lzo) からダウンロード可能な hadoop-lzo ライブラリを使用できます。これはサードパーティーライブラリであるため、Amazon EMR はこのツールを使用する方法について開発者サポートを提供しないことに注意してください。使用法については、[hadoop-lzo の readme ファイル](https://github.com/kevinweil/hadoop-lzo/blob/master/README.md)を参照してください。

# Amazon EMR を使用して DynamoDB データを Hive にインポートする
<a name="emr-plan-input-dynamodb"></a>

Amazon EMR によって提供される Hive の実装には、DynamoDB と Amazon EMR クラスターの間でデータのインポートおよびエクスポートを行う場合に使用できる機能が含まれています。これは、入力データが DynamoDB に保存されている場合に役に立ちます。詳細については、「[Amazon EMR による DynamoDB 内テーブルのエクスポート、インポート、クエリ、結合](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/EMRforDynamoDB.html)」を参照してください。

# Amazon EMR AWS Direct Connect から を使用してデータに接続する
<a name="emr-plan-input-directconnect"></a>

Direct Connect は、データセンター、オフィス、またはコロケーション環境から Amazon Web Services へのプライベート専用ネットワーク接続を確立するために使用できるサービスです。大量の入力データがある場合、 を使用すると、ネットワークコストを削減し、帯域幅スループットを向上させ、インターネットベースの接続よりも一貫したネットワークエクスペリエンスを提供 Direct Connect できます。詳細については、Direct Connect ユーザーガイドを参照してください。

# を使用して Amazon EMR の大量のデータをアップロードする AWS Snowball Edge
<a name="emr-plan-input-snowball"></a>

AWS Snowball Edge は、Amazon Simple Storage Service (Amazon S3) とオンサイトのデータストレージロケーション間で大量のデータをfaster-than-internetに転送するために使用できるサービスです。Snowball Edge では、インポートジョブとエクスポートジョブの 2 つのジョブタイプをサポートしています。インポートジョブには、オンプレミスのソースから Simple Storage Service (Amazon S3) バケットへのデータ転送が含まれます。エクスポートジョブには、Simple Storage Service (Amazon S3) バケットからオンプレミスのソースへのデータ転送が含まれます。どちらのジョブタイプでも、地域の配送業者が Simple Storage Service (Amazon S3) とお客様のオンサイトデータストレージロケーション間を輸送する間、Snowball Edge デバイスは安全であり、データが保護されます。Snowball Edge デバイスは物理的に堅牢で、 AWS Key Management Service () によって保護されていますAWS KMS。詳細については、「[AWS Snowball Edge Edge デベロッパーガイド](https://docs.aws.amazon.com/snowball/latest/developer-guide/)」を参照してください。