Amazon EMR
管理指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

上传数据到 Amazon S3

有关如何将对象上传到 Amazon S3 的信息,请参阅 Amazon Simple Storage Service Getting Started Guide 中的将对象添加到存储桶。有关如何借助 Hadoop 使用 Amazon S3 的详细信息,请参阅 http://wiki.apache.org/hadoop/AmazonS3

创建和配置 Amazon S3 存储段

Amazon EMR 将AWS SDK for Java与 Amazon S3 结合使用来存储输入数据、日志文件和输出数据。Amazon S3 将这些存储位置称为存储桶。存储桶具有某些限制以符合 Amazon S3 和 DNS 要求。有关更多信息,请参阅 Amazon Simple Storage Service Developer Guide 中的存储桶局限和限制

本节说明如何使用 Amazon S3 AWS Management Console创建存储桶,并为 Amazon S3 存储桶设置权限。您还可以使用 Amazon S3 API 或 AWS CLI 为 Amazon S3 存储桶创建和设置权限。您还可以将 Curl 与修改一起使用来传递 Amazon S3 的相应身份验证参数。

请参阅以下资源:

注意

如果您为存储桶启用日志记录,则只启用存储桶访问日志,而不会启用 Amazon EMR cluster日志。

在存储桶创建期间或创建后,您可以根据应用程序设置适当权限来访问存储桶。一般情况下,您可以给自己(所有者)授予读取和写入权限,并给已验证用户授予读取访问权限。

在创建cluster之前,所需的 Amazon S3 存储桶必须存在。必须将cluster中引用的任何所需脚本或数据上传至 Amazon S3。下表介绍了示例数据、脚本和日志文件位置。

最佳实践

以下是有关将 Amazon S3 存储桶与 EMR 集群结合使用的建议。

启用版本控制

版本控制是针对 Amazon S3 存储桶的建议的配置。一旦启用版本控制,则可确保即使数据被意外删除或覆盖,也可恢复数据。有关更多信息,请转至 Amazon Simple Storage Service Developer Guide 中的使用版本控制

考虑生命周期管理

利用 Amazon S3 中的生命周期管理,您可以创建控制对象的存储类和生命周期的规则。有关更多信息,请参阅对象生命周期管理

清除失败的分段上传和版本标记

默认情况下,EMR 集群组件通过适用于 Java 的 AWS 开发工具包与 Amazon S3 API 结合来使用分段上传,以将日志文件和输出数据写入 Amazon S3。有关更改此配置的信息,请参阅为 Amazon S3 配置分段上传。Amazon EMR 不会自动管理未完成的分段上传。有时,上传大型文件会生成未完成的 Amazon S3 分段上传。在分段上传无法成功完成时,进行中的分段上传将继续占用存储桶并会产生存储费用。建议为与 Amazon EMR 结合使用的存储桶启用生命周期规则,以在上传启动日期三天后删除仍未完成的分段上传。有关更多信息,请参阅使用存储桶生命周期策略中止未完成的分段上传

删除受版本控制的存储桶中的对象时将创建删除标记。如果对象的所有早期版本随后过期,则存储桶中将保留过期的对象删除标记。这些删除标记不会产生费用,删除过期的删除标记可提高 LIST 请求的性能。此外,建议对将用于 Amazon EMR 的受版本控制的存储桶启用规则以删除过期的对象删除标记。有关更多信息,请参阅 Amazon Simple Storage Service Console User Guide 中的使用版本控制的存储桶的生命周期配置

性能最佳实践

根据您的工作负载,对 EMR 集群及其上应用程序的特定类型使用会导致对存储桶的大量请求。有关更多信息,请参阅 Amazon Simple Storage Service Developer Guide中的请求率和性能注意事项

为 Amazon S3 配置分段上传

借助适用于 Java 的 AWS 开发工具包,Amazon EMR 支持 Amazon S3 分段上传。分段上传可让您将单独数据元作为一组片段上传。您可以独立上传以及按任意顺序上传这些对象分段。如果任意分段传输失败,可以重新传输该分段且不会影响其他分段。当数据元的所有片段都上传后,Amazon S3 会将数据汇编起来,然后创建数据元。

有关 Amazon S3 分段上传的更多信息,请转至 Amazon Simple Storage Service Developer Guide 中的使用分段上传进行对象上传

下表中描述了分段上传的 Amazon EMR 配置参数。

配置参数名称 默认值 说明
fs.[s3|s3n].multipart.uploads.enabled True 布尔值类型,指示是否要启用分段上传。
fs.s3n.ssl.enabled True 布尔值类型,指示使用 http 还是 https。
fs.s3.buckets.create.enabled True 如果存储桶不存在,此设置会自动创建存储桶。在这种情况下,设置为“False”会导致 CreateBucket 操作异常。

使用引导操作修改分段上传的配置参数。

使用 Amazon EMR 控制台禁用分段上传

此过程介绍了如何使用 Amazon EMR 控制台禁用分段上传。

使用控制台通过引导操作禁用分段上传

  1. Open the Amazon EMR console at https://console.amazonaws.cn/elasticmapreduce/.

  2. 选择 Create cluster

  3. 选择 Go to advanced options

  4. 选择 Edit Software Settings 并输入下面的配置:classification=core-site,properties=[fs.s3.multipart.uploads.enabled=false]

  5. 按照计划和配置集群中所述继续创建集群。

使用 AWS CLI 禁用分段上传

此过程介绍如何使用 AWS CLI 禁用分段上传。要禁用分段上传,请键入带 --bootstrap-actions 参数的 create-cluster 命令。

使用 AWS CLI 禁用分段上传

  1. 创建文件 myConfig.json 并输入以下内容:

    [ { "Classification": "core-site", "Properties": { "fs.s3n.multipart.uploads.enabled": "false" } } ]
  2. 请键入以下命令,将 myKey 替换为您的 EC2 密钥对的名称。

    aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 --applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m4.large --instance-count 3 --configurations file://./myConfig.json

使用 API 禁用分段上传

有关以编程方式使用 Amazon S3 分段上传的信息,请转至 Amazon Simple Storage Service Developer Guide 中的使用适用于 Java 的 AWS 开发工具包进行分段上传

有关适用于 Java 的 AWS 开发工具包的更多信息,请转到适用于 Java 的 AWS 开发工具包详细信息页面。