本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
如何將資料寫入非使用 Amazon EMR 擁有的 Amazon S3 儲存貯體
當您將檔案寫入至 Amazon Simple Storage Service (Amazon S3) 儲存貯體時,依預設,您是唯一一個能讀取該檔案的人。假設您將檔案寫入自己的儲存貯體,且此預設設定可保護檔案的隱私。
不過,如果您正在執行叢集,而且您希望輸出寫入其他 AWS 使用者的 Amazon S3 儲存貯體,而且您希望其他 AWS 使用者能夠讀取該輸出,則必須執行下列兩個動作:
-
讓其他 AWS 使用者授予您為其 Amazon S3 儲存貯體寫入許可。您啟動的叢集會在您的 AWS 登入資料下執行,因此您啟動的任何叢集也能夠寫入該其他 AWS 使用者的儲存貯體。
-
在您或叢集寫入 Amazon S3 儲存貯體的檔案上設定其他 AWS 使用者的讀取許可。設定這些讀取許可最簡單的方法,是使用固定的存取控制清單 (ACL),這是由 Amazon S3 定義的一組預先定義的存取政策。
如需其他 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 命令提示字元處,將
fs.s3.canned.acl組態選項設定為您想在寫入至 Amazon S3 的檔案上設定叢集的固定 ACL。若要存取使用 SSH 連接到主節點的 Hive 命令提示字元,然後在 Hadoop 命令提示字元處鍵入 Hive。如需詳細資訊,請參閱使用 SSH 連線至 Amazon EMR 叢集主節點。下列範例將
fs.s3.canned.acl組態選項設為BucketOwnerFullControl,以給予 Amazon S3 儲存貯體擁有者完整的檔案控制能力。請注意,設定命令區分大小寫,且不包含引號或空格。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;範例的最後兩行會建立一個儲存在 Amazon S3 中的資料表,並將資料寫入至資料表。
在 Pig 中使用固定 ACL 寫入檔案
-
從 Pig 命令提示字元處,將
fs.s3.canned.acl組態選項設定為您想在寫入至 Amazon S3 的檔案上設定叢集的固定 ACL。若要存取使用 SSH 連接到主節點的 Pig 命令提示字元,然後在 Hadoop 命令提示字元處鍵入 Pig。如需詳細資訊,請參閱使用 SSH 連線至 Amazon EMR 叢集主節點。下列範例將
fs.s3.canned.acl組態選項設為 BucketOwnerFullControl,以給予 Amazon S3 儲存貯體擁有者完整的檔案控制能力。請注意,設定命令在固定 ACL 名稱前包含一個空格,並且不包含引號。pig> set fs.s3.canned.acl BucketOwnerFullControl; store some data into 's3://amzn-s3-demo-bucket/pig/acl';
在自訂 JAR 中使用固定 ACL 寫入檔案
-
透過 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