如何將資料寫入非 Amazon 擁有的 Amazon S3 儲存貯體 EMR - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

如何將資料寫入非 Amazon 擁有的 Amazon S3 儲存貯體 EMR

當您將檔案寫入至 Amazon Simple Storage Service (Amazon S3) 儲存貯體時,依預設,您是唯一一個能讀取該檔案的人。假設您將檔案寫入自己的儲存貯體,且此預設設定可保護檔案的隱私。

不過,如果您正在執行叢集,且您希望輸出寫入其他 AWS 使用者的 Amazon S3 儲存貯體,且您希望其他 AWS 使用者能夠讀取該輸出,則必須執行下列兩個動作:

  • 請其他 AWS 使用者授予您為其 Amazon S3 儲存貯體撰寫許可。您啟動的叢集會在您的 AWS 憑證下執行,因此您啟動的任何叢集也能夠寫入該其他 AWS 使用者的儲存貯體。

  • 在您或叢集寫入 Amazon S3 儲存貯體的檔案上設定其他 AWS 使用者的讀取許可。設定這些讀取許可的最簡單方法是使用 固定存取控制清單 (ACLs),這是一組由 Amazon S3 定義的預先定義存取政策。

如需其他 AWS 使用者如何授予您許可,以將檔案寫入其他使用者的 Amazon S3 儲存貯體的資訊,請參閱 Amazon Simple Storage Service 使用者指南 中的編輯儲存貯體許可

若要讓您的叢集在將檔案寫入 Amazon S3 ACLs時使用 固定組態,請將fs.s3.canned.acl叢集組態選項設定為ACL要使用的 固定組態選項。下表列出目前定義的固定 ACLs。

罐裝 ACL 描述
AuthenticatedRead 指定擁有者已授予 Permission.FullControlGroupGrantee.AuthenticatedUsers 群組承授者被授予 Permission.Read 存取權限。
BucketOwnerFullControl 指定儲存貯體擁有者已授予 Permission.FullControl。儲存貯體的擁有者不一定與物件的擁有者相同。
BucketOwnerRead 指定儲存貯體擁有者已授予 Permission.Read。儲存貯體的擁有者不一定與物件的擁有者相同。
LogDeliveryWrite 指定擁有者已授予 Permission.FullControlGroupGrantee.LogDelivery 群組承授者被授予 Permission.Write 存取權限,故可提供該存取日誌。
Private 指定擁有者已授予 Permission.FullControl
PublicRead 指定擁有者已授予 Permission.FullControlGroupGrantee.AllUsers 群組承授者被授予 Permission.Read 存取權限。
PublicReadWrite 指定擁有者已授予 Permission.FullControlGroupGrantee.AllUsers 群組承授者被授予 Permission.ReadPermission.Write 存取權限。

根據您正在執行的叢集類型,有許多方法可以設定叢集組態選項。下列程序說明如何為一般情況設定選項。

在 Hive ACLs 中使用 固定寫入檔案
  • 從 Hive 命令提示中,將fs.s3.canned.acl組態選項設定為ACL您想要在寫入 Amazon S3 的檔案上設定叢集的固定項目。若要存取 Hive 命令提示字元,請使用 連線至主節點SSH,然後在 Hadoop 命令提示字元中輸入 Hive。如需詳細資訊,請參閱使用 連線至 Amazon EMR叢集主節點 SSH

    下列範例將 fs.s3.canned.acl 組態選項設為 BucketOwnerFullControl,以給予 Amazon S3 儲存貯體擁有者完整的檔案控制能力。請注意,設定命令區分大小寫,且不包含引號或空格。

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

    範例的最後兩行會建立一個儲存在 Amazon S3 中的資料表,並將資料寫入至資料表。

使用 Pig ACLs中的固定寫入檔案
  • 從 Pig 命令提示中,將fs.s3.canned.acl組態選項設定為ACL您想要在寫入 Amazon S3 的檔案上設定叢集的固定項目。若要存取 Pig 命令提示字元,請使用 連線至主節點SSH,然後在 Hadoop 命令提示字元中輸入 Pig。如需詳細資訊,請參閱使用 連線至 Amazon EMR叢集主節點 SSH

    下列範例會將fs.s3.canned.acl組態選項設定為 BucketOwnerFullControl,讓 Amazon S3 儲存貯體的擁有者能夠完全控制檔案。請注意,set 命令在固定ACL名稱之前包含一個空格,並且不包含引號。

    pig> set fs.s3.canned.acl BucketOwnerFullControl; store some data into 's3://acltestbucket/pig/acl';
在自訂ACLs中使用 固定寫入檔案 JAR
  • 透過 Hadoop 與 -D 旗標設定 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