本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
如何使用 Amazon EMR 将数据写入非您拥有的 Amazon S3 存储桶
默认情况下,当您将文件写入到 Amazon Simple Storage Service(Amazon S3)存储桶时,您是唯一一个能够读取该文件的用户。假设您将文件写入到您自己的存储桶,此默认设置会保护您的文件隐私。
然而,如果您正在运行集群,并且要让输出写入到另一个 Amazon 用户的 Amazon S3 存储桶以及要让其它 Amazon 用户能够读取此输出,您必须做两件事情:
-
让其它 Amazon 用户授予您写入他们的 Amazon S3 存储桶的权限。您启动的集群会在 Amazon 凭证下运行,因此您启动的任何集群也将能够写换为您的其他 Amazon 用户的存储桶。
-
为其它 Amazon 用户设置文件(您或集群可以写入 Amazon S3 存储桶)读取权限。设置这些读取权限的最简单方法是使用预装访问控制列表(ACLs),这是一组由 Amazon S3 预先定义的访问策略。
有关其他 Amazon 用户可以如何授予您向其 Amazon S3 存储桶写入文件权限的信息,请参阅《Amazon S imple Storage Service 用户指南》中的编辑存储桶权限。
对于在将文件写入到 Amazon S3 ACLs 时使用的预装,请将fs.s3.canned.acl
集群配置选项设置为预装 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 访问权限。 |
根据您正在运行的集群类型,有多种方法可设置集群配置选项。以下步骤介绍了如何设置常见案例的选项。
ACLs 在 Hive 中使用 canded 写入文件
-
通过 Hive 命令提示符,将
fs.s3.canned.acl
配置选项设置为您想在其写入 Amazon S3 的文件上设置集群的预装 ACL。要访问 Hive 命令提示符,可通过 SSH 连接到主节点,然后在 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 ACLs 中使用 canded 写文件
-
通过 Pig 命令提示符,将
fs.s3.canned.acl
配置选项设置为您想在其写入 Amazon S3 的文件上设置集群的预装 ACL。要访问 Pig 命令提示符,可通过 SSH 连接到主节点,然后在 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 ACLs 中使用 canded 写入文件
-
利用带有 -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