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

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

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

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

ただし、クラスターを実行していて、出力を別の AWS ユーザーの Amazon S3 バケットに書き込む場合、その AWS 他のユーザーがその出力を読み取れるようにするには、次の 2 つの操作を行う必要があります。

  • AWS 他のユーザーに Amazon S3 バケットの書き込みアクセス許可を付与してもらいます。起動するクラスターは AWS 認証情報で実行されるため、起動するクラスターは AWS 他のユーザーのバケットに書き込むこともできます。

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

他のユーザーが AWS 他のユーザーの Amazon S3 バケットにファイルを書き込むアクセス許可を付与する方法については、Amazon Simple Storage Service ユーザーガイド「バケットのアクセス許可の編集」を参照してください。

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

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

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

    hive> set fs.s3.canned.acl=BucketOwnerFullControl; create table acl (n int) location 's3://amzn-s3-demo-bucket/acl/'; insert overwrite table acl select count(*) from acl;

    例の最後の 2 行では、Simple Storage Service (Amazon S3) に保存されるテーブルを作成し、そのテーブルにデータを書き込みます。

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

    次の例では、 fs.s3.canned.acl設定オプションを に設定し BucketOwnerFullControl、Amazon S3 バケットの所有者に ファイルに対する完全な制御を許可します。set コマンドには、既定ACL名の前にスペースが 1 つ含まれ、引用符は含まれないことに注意してください。

    pig> set fs.s3.canned.acl BucketOwnerFullControl; store some data into 's3://amzn-s3-demo-bucket/pig/acl';
カスタムACLsの既定 を使用してファイルを書き込むには JAR
  • -D フラグを指定して Hadoop を使用して、fs.s3.canned.acl 設定オプションを設定します。これを次の例に示します。

    hadoop jar hadoop-examples.jar wordcount -Dfs.s3.canned.acl=BucketOwnerFullControl s3://amzn-s3-demo-bucket/input s3://amzn-s3-demo-bucket/output