メニュー
Amazon EMR
管理ガイド

所有していない Amazon S3 バケットにデータを書き込む方法

Amazon Simple Storage Service (Amazon S3) バケットにファイルを書き込むと、デフォルトではお客様以外はそのファイルを読むことができません。これは、自分専用のバケットにファイルを書き込むことが前提になっており、このデフォルト設定によってファイルのプライバシーを保護しています。

そのため、クラスターの実行時に出力を別の AWS ユーザーの Amazon S3 バケットに書き込んで、その AWS ユーザーが出力を読み取れるようにするには、次の 2 つのことを実行する必要があります。

  • 他の AWS ユーザーが、その Amazon S3 バケットへの書き込み権をお客様に与える。お客様が起動するクラスターはお客様の AWS 認証情報で実行されるため、起動したすべてのクラスターも、他の AWS ユーザーのバケットに書き込むことができます。

  • 他の AWS ユーザーに対して、お客様またはクラスターが Amazon S3 バケットに書き込むファイルへの読み取り許可を与える。この読み取り許可を設定する最も簡単な方法は、Amazon S3 で事前定義されているアクセスポリシーのセットである既定アクセスコントロールリスト(ACL)を使用することです。

他の AWS ユーザーがその Amazon S3 バケットにファイルを書き込む許可をお客様に与える方法については、Amazon Simple Storage Service コンソールユーザーガイドの「バケット許可の編集」を参照してください。

お客様のクラスターが Amazon S3 へのファイル書き込み時に既定 ACL を使用するようにするには、クラスター設定オプションの fs.s3.canned.acl として、使用する既製の ACL を設定します。次の表に、現在定義されている既定 ACL のリストを示します。

既定 ACL 説明
AuthenticatedRead 所有者には Permission.FullControl が、GroupGrantee.AuthenticatedUsers グループには Permission.Read アクセスが与えられるように指定します。
BucketOwnerFullControl バケットの所有者に Permission.FullControl が与えられるように指定します。バケットの所有者は、オブジェクトの所有者と同じであるとは限りません。
BucketOwnerRead バケットの所有者に Permission.Read が与えられるように指定します。バケットの所有者は、オブジェクトの所有者と同じであるとは限りません。
LogDeliveryWrite アクセスログを作成できるように、所有者には Permission.FullControl が、GroupGrantee.LogDelivery グループには Permission.Write アクセスが与えられるように指定します。
Private 所有者に Permission.FullControl が与えられるように指定します。
PublicRead 所有者には Permission.FullControl が、GroupGrantee.AllUsers グループには Permission.Read アクセスが与えられるように指定します。
PublicReadWrite 所有者には Permission.FullControl が、GroupGrantee.AllUsers グループには Permission.Read および Permission.Write アクセスが与えられるように指定します。

クラスターの設定オプションを設定する方法は、実行するクラスターのタイプに応じてさまざまです。以下の手順では、一般的なケースでオプションを設定する方法を示します。

Hive で既定 ACL を使用してファイルを書き込むには

  • Hive のコマンドプロンプトで、クラスターが Amazon S3 に書き込むファイルに対して設定する既定 ACL を fs.s3.canned.acl 設定オプションに設定します。Hive のコマンドプロンプトにアクセスするには、SSH を使用してマスターノード接続し、Hadoop のコマンドプロンプトに "Hive" と入力します。詳細については、「SSH を使用してマスターノードに接続する」を参照してください。

    次の例では、fs.s3.canned.acl 設定オプションを BucketOwnerFullControl に設定することにより、Amazon S3 バケットの所有者に対してファイルの完全なコントロールを許可しています。set コマンドでは大文字と小文字が区別され、引用符やスペースは使用できません。

    Copy
    hive> set fs.s3.canned.acl=BucketOwnerFullControl; create table acl (n int) location 's3://acltestbucket/acl/'; insert overwrite table acl select count(n) from acl;

    例の最後の 2 行では、Amazon S3 に格納されるテーブルを作成し、そのテーブルにデータを書き込みます。

Pig で既定 ACL を使用してファイルを書き込むには

  • Pig のコマンドプロンプトで、クラスターが Amazon S3 に書き込むファイルに対して設定する既定 ACL を fs.s3.canned.acl 設定オプションに設定します。Pig のコマンドプロンプトにアクセスするには、SSH を使用してマスターノード接続し、Hadoop のコマンドプロンプトに "Pig" と入力します。詳細については、「SSH を使用してマスターノードに接続する」を参照してください。

    次の例では、fs.s3.canned.acl 設定オプションを BucketOwnerFullControl に設定することにより、Amazon S3 バケットの所有者に対してファイルの完全なコントロールを許可しています。set コマンドでは、既定 ACL 名の前にスペースを 1 つ挿入し、引用符は使用しません。

    Copy
    pig> set fs.s3.canned.acl BucketOwnerFullControl; store some data into 's3://acltestbucket/pig/acl';

カスタム JAR で既定 ACL を使用してファイルを書き込むには

  • -D フラグを指定して Hadoop を使用して、fs.s3.canned.acl 設定オプションを設定します。これを次の例に示します。

    Copy
    hadoop jar hadoop-examples.jar wordcount -Dfs.s3.canned.acl=BucketOwnerFullControl s3://mybucket/input s3://mybucket/output