データを 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 で新しいパートのアップロードを開始する前に、パートの最大サイズ (バイト単位) を指定します。最小値は EMRFS のクライアント側で暗号化が無効になっていて、Simple Storage Service (Amazon S3) 向けに最適化されたコミッターも無効になっている場合は、この値によって、EMRFS でファイルのアップロードに |
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 コンソールは、再設計され、使いやすくなりました。古いコンソールと新しいコンソールエクスペリエンスの違いについては、「コンソールの新機能」を参照してください。
ベストプラクティス
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.enabled
をTRUE
に設定し、他のクリーンアップパラメータをチューニングすることで、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 ユーザーガイド」の「リクエスト率とパフォーマンスに関する考慮事項」を参照してください。