データを Simple Storage Service (Amazon S3) にアップロードする - Amazon EMR

データを Simple Storage Service (Amazon S3) にアップロードする

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

Amazon S3 バケットの作成と設定

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

このセクションでは、Simple Storage Service (Amazon S3) AWS Management Consoleを使用して、Simple Storage Service (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) ユーザーガイド」の「バケットの作成」を参照してください。

  • AWS CLI を使用してバケットを作成および使用する方法については、の「Simple Storage Service (Amazon S3) ユーザーガイド」の「AWS Command Line Interface での高レベルの S3 コマンドの使用」を参照してください。

  • SDK を使用してバケットを作成する方法については、「Amazon Simple Storage Service ユーザーガイド」の「バケットを作成する例」を参照してください。

  • curl を使用してバケットを操作する方法については、「curl 用の Simple Storage Service (Amazon S3) 認証ツール」を参照してください。

  • リージョンの詳細については、「Amazon Simple Storage Service ユーザーガイド」の「バケットへのアクセス」を参照してください。

  • Amazon S3 Access Points を使用してバケットで作業する方法については、「Simple Storage Service (Amazon S3) ユーザーガイドの「アクセスポイントでのバケット形式のエイリアスの使用」を参照してください。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) 用のマルチパートアップロードを設定する

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

詳細については、Amazon Simple Storage Service ユーザーガイドマルチパートアップロードの概要を参照してください。

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

マルチパートアップロードのための Amazon EMR の設定プロパティを次の表で説明します。これらは、core-site 設定分類を使用して設定することができます。詳細については、「Amazon EMR リリースガイド」の「アプリケーションの設定」を参照してください。

設定パラメータ名 デフォルト値 説明
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 分間の固定遅延に追加するランダムのジッター遅延時間 (秒単位) の最大数を指定する整数型です。

マルチパートアップロードの無効化

注記

Amazon EMR コンソールは、再設計され、使いやすくなりました。古いコンソールと新しいコンソールエクスペリエンスの違いについては、「コンソールの新機能」を参照してください。

New console
新しいコンソールでマルチパートアップロードを無効にするには
  1. AWS Management Consoleにサインインし、Amazon EMR コンソール (https://console.aws.amazon.com/emr) を開きます。

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

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

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

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

Old console
古いコンソールでマルチパートアップロードを無効にするには
  1. 新しい Amazon EMR コンソールに移動し、サイドナビゲーションから [古いコンソールに切り替え] を選択します。古いコンソールに切り替えたときの動作の詳細については、「Using the old console」を参照してください。

  2. [Create cluster (クラスターの作成)]、[Go to advanced options (詳細オプションに移動する)] の順に選択します。

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

  4. クラスターの作成に進みます。

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

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

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

    [ { "Classification": "core-site", "Properties": { "fs.s3n.multipart.uploads.enabled": "false" } } ]
  2. 次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換えます。

    注記

    読みやすくするために、Linux 行連続文字 (\) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

    aws emr create-cluster --name "Test cluster" \ --release-label emr-5.36.1 --applications Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge \ --instance-count 3 --configurations file://myConfig.json
CLI
API を使用してマルチパートアップロードを無効にするには

ベストプラクティス

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

バージョニングの有効化

バージョニングは、Amazon S3 バケット用の推奨設定です。バージョニングを有効にすると、データが誤って削除または上書きされても復元できます。詳細については、「Amazon Simple Storage Service ユーザーガイド」の「バージョニングの使用」を参照してください。

失敗したマルチパートアップロードをクリーンアップする

EMR クラスターコンポーネントでは、デフォルトで AWS SDK for Java を通じてマルチパートアップロードを使用し、Simple Storage Service (Amazon S3) API を使用して、ログファイルと出力データを Simple Storage Service (Amazon S3) に書き込みます。Amazon EMR を使用した、この設定に関連するプロパティの変更の詳細については、「Simple Storage Service (Amazon S3) 用のマルチパートアップロードを設定する」を参照してください。大きなファイルのアップロードでは、Simple Storage Service (Amazon S3) マルチパートアップロードが未完了になることがあります。マルチパートアップロードを正常に完了できないと、進行中のマルチパートアップロードによって継続的にバケットが使用され、ストレージ料金が発生します。過剰なファイルストレージを避けるために以下のオプションをお勧めします。

  • Amazon EMR で使用するバケットについては、Simple Storage Service (Amazon S3) でライフサイクル設定ルールを使用して、アップロードの開始日から 3 日後に未完了のマルチパートアップロードを削除します。ライフサイクル設定ルールを使用すると、オブジェクトのストレージクラスと有効期限を制御できます。詳細については、「オブジェクトのライフサイクル管理」および「バケットライフサイクルポリシーを使用した不完全なマルチパートアップロードの中止」を参照してください。

  • fs.s3.multipart.clean.enabledTRUE に設定し、他のクリーンアップパラメータをチューニングすることで、Amazon EMR のマルチパートクリーンアップ機能を有効にします。この機能は、大容量、大規模、および稼働時間が限られているクラスターで便利です。この場合は、ライフサイクル設定ルールの DaysAfterIntitiation パラメータが、最小に設定しても長すぎるため、Simple Storage Service (Amazon S3) ストレージでスパイクを発生させています。Amazon EMR のマルチパートクリーンアップでは、より正確に制御できます。詳細については、「Simple Storage Service (Amazon S3) 用のマルチパートアップロードを設定する」を参照してください。

バージョンマーカーを管理する

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

パフォーマンスに関するベストプラクティス

EMR クラスターやこれらのクラスターのアプリケーションでは、使い方やワークロードに応じて、バケットに対する多数のリクエストが発生することがあります。詳細については、「Amazon Simple Storage Service ユーザーガイド」の「リクエスト率とパフォーマンスに関する考慮事項」を参照してください。