

# ローカルの Amazon EMR on Outposts を使用した Amazon S3 on Outposts
<a name="s3-outposts-emr"></a>

Amazon EMR は、Apache Hadoop や Apache Spark などのビッグデータフレームワークを AWS で簡単に実行して、膨大な量のデータを処理および分析できるマネージドクラスタープラットフォームです。これらのフレームワークと、関連するオープンソースプロジェクトを使用することで、分析用のデータやビジネスインテリジェンスワークロードを処理できます。Amazon EMR は、大量のデータを変換したり、他の AWS データストアやデータベースとの間で出し入れしたりできるようにします。また、Amazon S3 on Outposts をサポートしています。Amazon EMR の詳細については、「Amazon EMR 管理ガイド」の「[Outposts での Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-outposts.html)」を参照してください。**

Amazon S3 on Outposts については、Amazon EMR はバージョン 7.0.0 で Apache Hadoop S3A コネクタのサポートを開始しました。以前のバージョンの Amazon EMR はローカルの S3 on Outposts をサポートしておらず、EMR ファイルシステム (EMRFS) はサポートされていません。

**サポートされているアプリケーション**  
Amazon S3 on Outposts を使用した Amazon EMR は、次のアプリケーションをサポートしています。
+ Hadoop
+ Spark
+ Hue
+ Hive
+ Sqoop
+ Pig
+ Hudi
+ Flink

詳細については、「[Amazon EMR リリースガイド](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-components.html)」を参照してください。

## Amazon S3 on Outposts バケットを作成して設定する
<a name="create-outposts-bucket"></a>

Amazon EMR では、Amazon S3 on Outposts で AWS SDK for Java を使用して、入力データと出力データを保存します。Amazon EMR ログファイルは、選択したリージョンの Amazon S3 ロケーションに保存され、Outpost にローカルに保存されることはありません。詳細については、「Amazon EMR 管理ガイド」の「[Amazon EMR ログ](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-manage-view-web-log-files.html)」を参照してください。**

Amazon S3 と DNS の要件に従うには、S3 on Outposts バケットに命名に関する制約と制限があります。詳細については、「[S3 on Outposts バケットを作成する](S3OutpostsCreateBucket.md)」を参照してください。

Amazon EMR バージョン 7.0.0 以降では、S3 on Outposts と S3A ファイルシステムで Amazon EMR を使用できます。

**前提条件**  
**S3 on Outposts アクセス許可** – Amazon EMR インスタンスプロファイルを作成する場合、ロールには S3 on Outposts の AWS Identity and Access Management (IAM) 名前空間が含まれている必要があります。S3 on Outposts には独自の名前空間、`s3-outposts*` があります。この名前空間を使用するポリシーの例については、「[S3 on Outposts で IAM を設定する](S3OutpostsIAM.md)」を参照してください。

**S3A コネクタ** – Amazon S3 on Outposts バケットのデータにアクセスするように EMR クラスターを設定するには、Apache Hadoop S3A コネクタを使用する必要があります。コネクタを使用するには、すべての S3 URI が `s3a` スキームを使用していることを確認してください。そうでない場合は、S3 URI が S3A コネクタと連携するように EMR クラスターに使用するファイルシステムの実装を設定できます。

S3A コネクタと連携するようにファイルシステムの実装を設定するには、EMR クラスターの `fs.{{file_scheme}}.impl` および `fs.AbstractFileSystem.{{file_scheme}}.impl` 設定プロパティを使用します。`{{file_scheme}}` は使用している S3 URI のタイプに対応します。次の例を使用するには、{{`user input placeholders`}} をユーザー自身の情報に置き換えます。例えば、`s3` スキームを使用する S3 URI ファイルシステムの実装を変更するには、次のクラスター設定プロパティを指定します。

```
1. [
2.   {
3. "Classification": "core-site",
4.     "Properties": {
5.     "fs.{{s3}}.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem",
6.     "fs.AbstractFileSystem.{{s3}}.impl": "org.apache.hadoop.fs.s3a.S3A"
7.     }
8.   }
9. ]
```

S3A を使用するには、`fs.{{file_scheme}}.impl` 設定プロパティを `org.apache.hadoop.fs.s3a.S3AFileSystem` に設定し、`fs.AbstractFileSystem.{{file_scheme}}.impl` プロパティを `org.apache.hadoop.fs.s3a.S3A` に設定します。

例えば、パス `s3a://{{bucket}}/...` にアクセスする場合は、`fs.s3a.impl` プロパティを `org.apache.hadoop.fs.s3a.S3AFileSystem` に設定し、`fs.AbstractFileSystem.s3a.impl` プロパティを `org.apache.hadoop.fs.s3a.S3A` に設定します。

## Amazon S3 on Outposts での Amazon EMR の開始方法
<a name="getting-started-outposts"></a>

以下のトピックでは、Amazon S3 on Outposts で Amazon EMR の使用を開始する方法について説明します。

**Topics**
+ [許可ポリシーを作成する](#create-permission-policy)
+ [クラスターを作成および設定する](#configure-cluster)
+ [設定の概要](#configurations-overview)
+ [考慮事項](#considerations)

### 許可ポリシーを作成する
<a name="create-permission-policy"></a>

Amazon S3 on Outposts を使用する EMR クラスターを作成する前に、クラスターの Amazon EC2 インスタンスプロファイルにアタッチする IAM ポリシーを作成する必要があります。ポリシーには、S3 on Outposts アクセスポイントの Amazon リソースネーム (ARN) にアクセスするためのアクセス許可が必要です。S3 on Outposts の IAM ポリシーの作成に関する詳細については、「[S3 on Outposts で IAM を設定する](S3OutpostsIAM.md)」を参照してください。

次のポリシー例は、必要なアクセス許可を付与する方法を示します。ポリシーを作成したら、[クラスターを作成および設定する](#configure-cluster) セクションで説明されているように、お使いの EMR クラスターの作成に使用するインスタンスプロファイルロールにポリシーをアタッチします。この例を実行するには、{{`user input placeholders`}} をユーザー自身の情報に置き換えます。

```
 1. {
 2. "Version":"2012-10-17",		 	 	  
 3.   "Statement": [
 4.         {
 5.   "Effect": "Allow",
 6.             "Resource": "arn:aws:s3-outposts:{{us-west-2}}:{{111122223333}}:outpost/{{op-01ac5d28a6a232904}}/accesspoint/{{access-point-name}},
 7.             "Action": [
 8.                 "s3-outposts:*"
 9.             ]
10.         }
11.     ]
12.     
13.  }
```

### クラスターを作成および設定する
<a name="configure-cluster"></a>

S3 on Outposts で Spark を実行するクラスターを作成するには、コンソールで次の手順を実行します。

**S3 on Outposts で Spark を実行するクラスターを作成するには**

1. Amazon EMR コンソール ([https://console.aws.amazon.com/elasticmapreduce/](https://console.aws.amazon.com/elasticmapreduce/)) を開きます。

1. 左のナビゲーションペインで **[クラスター]** を選択します。

1. **[クラスターを作成]** を選択します。

   

1. **[Amazon EMR リリース]** で、**emr-7.0.0** 以降を選択します。

1. アプリケーションバンドル で、**[Spark インタラクティブ]** を選択します。次に、クラスターに含める他のサポートされているアプリケーションを選択します。

1. Amazon S3 on Outposts を有効にするには、構成設定を入力します。

**構成設定の例**  
次の構成設定の例を使用するには、`{{user input placeholders}}` をユーザー自身の情報に置き換えます。

   ```
    1. [
    2.  {
    3.    "Classification": "core-site",
    4.    "Properties": {
    5.      "fs.s3a.bucket.{{DOC-EXAMPLE-BUCKET}}.accesspoint.arn": "arn:aws:s3-outposts:{{us-west-2}}:{{111122223333}}:outpost/{{op-01ac5d28a6a232904}}/accesspoint/{{access-point-name}}"
    6.      "fs.s3a.committer.name": "magic", 
    7.      "fs.s3a.select.enabled": "false"
    8.     }
    9.   },
   10.   {
   11.     "Classification": "hadoop-env",
   12.     "Configurations": [
   13.       {
   14.         "Classification": "export",
   15.         "Properties": {
   16.           "JAVA_HOME": "/usr/lib/jvm/java-11-amazon-corretto.x86_64" 
   17.           }
   18.        }
   19.      ],
   20.      "Properties": {}
   21.    },
   22.    {
   23.      "Classification": "spark-env",
   24.      "Configurations": [
   25.        {
   26.          "Classification": "export",
   27.          "Properties": {
   28.            "JAVA_HOME": "/usr/lib/jvm/java-11-amazon-corretto.x86_64"
   29.          }
   30.        }
   31.       ],
   32.       "Properties": {}
   33.      },
   34.      {
   35.       "Classification": "spark-defaults",
   36.       "Properties": {
   37.         "spark.executorEnv.JAVA_HOME": "/usr/lib/jvm/java-11-amazon-corretto.x86_64",
   38.         "spark.sql.sources.fastS3PartitionDiscovery.enabled": "false"
   39.       }
   40.      }
   41.   ]
   ```

1. **[ネットワーク]** セクションで、AWS Outposts ラック上にある仮想プライベートクラウド (VPC) とサブネットを選択します。Amazon EMR on Outposts の詳細については、「Amazon EMR 管理ガイド」の「[AWS Outposts での EMR クラスター](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-outposts.html)」を参照してください。**

1. **[Amazon EMR の EC2 インスタンスプロファイル]** セクションで、[前に作成したアクセス許可ポリシー](#create-permission-policy)がアタッチされている IAM ロールを選択します。

1. 残りのクラスター設定を行い、**[クラスターの作成]** を選択します。

### 設定の概要
<a name="configurations-overview"></a>

次の表は、Amazon EMR で S3 on Outposts を使用するクラスターをセットアップするときに、S3A 設定とそのパラメータに指定する値を示しています。


| パラメータ | デフォルト値 | S3 on Outposts に必要な値 | 説明 | 
| --- | --- | --- | --- | 
| `fs.s3a.aws.credentials.provider` | 指定しない場合、S3A は Outposts のバケット名を持つリージョンバケットで S3 を検索します。 | S3 on Outposts バケットのアクセスポイント ARN | Amazon S3 on Outposts は、Outposts バケットにアクセスする唯一の手段として、Virtual Private Cloud (VPC) のみのアクセスポイントをサポートします。 | 
| `fs.s3a.committer.name` | file | `magic` | マジックコミッターは、S3 on Outposts でサポートされている唯一のコミッターです。 | 
| `fs.s3a.select.enabled` | `TRUE` | `FALSE` | S3 Select は Outposts ではサポートされていません。 | 
| `JAVA_HOME` | `/usr/lib/jvm/java-8` | `/usr/lib/jvm/java-11-amazon-corretto.x86_64` | S3A 上の S3 on Outposts には、Java バージョン 11 が必要です。 | 

次の表は、Amazon EMR で S3 on Outposts を使用するクラスターをセットアップするときに、Spark 設定とそのパラメータに指定する値を示しています。


| パラメータ | デフォルト値 | S3 on Outposts に必要な値 | 説明 | 
| --- | --- | --- | --- | 
| `spark.sql.sources.fastS3PartitionDiscovery.enabled` | `TRUE` | `FALSE` | S3 on Outposts は高速パーティションをサポートしていません。 | 
| `spark.executorEnv.JAVA_HOME` | `/usr/lib/jvm/java-8` | `/usr/lib/jvm/java-11-amazon-corretto.x86_64` | S3A 上の S3 on Outposts には、Java バージョン 11 が必要です。 | 

### 考慮事項
<a name="considerations"></a>

Amazon EMR を S3 on Outposts バケットと統合するときは、次の点を考慮してください。
+ Amazon S3 on Outposts は、Amazon EMR バージョン 7.0.0 以降でサポートされています。
+ Amazon EMR で S3 on Outposts を使用するには、S3A コネクタが必要です。S3 on Outposts バケットを操作するために必要な機能を備えているのは S3A のみです。S3A コネクタのセットアップ情報については、「[前提条件](#s3a-outposts-prerequisites)」を参照してください。
+ Amazon S3 on Outposts は、Amazon EMR での Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3) のみをサポートします。詳細については、「[S3 on Outposts のデータ暗号化](s3-outposts-data-encryption.md)」を参照してください。
+ Amazon S3 on Outposts は、S3A FileOutputCommitter を使用した書き込みをサポートしていません。S3 on Outposts バケットに S3A FileOutputCommitter を使用して書き込むと、次のエラーが発生します。InvalidStorageClass: The storage class you specified is not valid
+ Amazon S3 on Outposts は、Amazon EMR Serverless または Amazon EMR on EKS ではサポートされていません。
+ Amazon EMR ログは、選択したリージョンの Amazon S3 ロケーションに保存され、S3 on Outposts バケットにローカルに保存されることはありません。