将数据上载到 Amazon S3 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

将数据上载到 Amazon S3

有关如何将文件上传到 Amazon S3 的说明,请参阅《Amazon Simple Storage Service 用户指南》中的向存储桶添加对象。有关将 Amazon S3 与 Hadoop 结合使用的更多信息,请参阅 http://wiki.apache.org/hadoop/AmazonS3

创建和配置 Amazon S3 存储桶

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

本部分会介绍如何使用 Amazon S3 Amazon Web Services Management Console创建存储桶,并为 Amazon S3 存储桶设置权限。您还可以使用 Amazon S3 API 或 Amazon CLI 为 Amazon S3 存储桶创建和设置权限。您还可以将 curl 与修改一起使用来传递 Amazon S3 的相应身份验证参数。

请参阅以下资源:

注意

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

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

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

为 Amazon S3 配置分段上载

Amazon EMR 通过 Amazon SDK for Java 支持 Amazon S3 分段上载。分段上载可让您将单独对象作为一组片段上载。您可以独立上载以及按任意顺序上载这些对象分段。如果任意分段传输失败,可以重新传输该分段且不会影响其它分段。上载完所有的对象分段后,Amazon S3 将汇集这些分段并创建对象。

有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的 分段上传概述

此外,Amazon EMR 提供的属性可让您更精确地对分段上载失败的分段进行清理。

下表描述了分段上载的 Amazon EMR 配置属性。您可以使用 core-site 配置分类配置这些属性。有关更多信息,请参阅《Amazon EMR 版本指南》中的配置应用程序

配置参数名称 默认值 描述
fs.s3n.multipart.uploads.enabled true 布尔值类型,指示是否要启用分段上载。当 EMRFS 一致视图处于启用状态时,系统会默认启用分段上传,而将此值设置为 false 会被忽略。
fs.s3n.multipart.uploads.split.size 134217728

在 EMRFS 启动新的分段上载之前且分段上载处于启用状态时,指定分段的大小上限(以字节为单位)。最小值为 5242880 (5 MB)。如果指定了较小值,则使用 5242880。最大值为 5368709120 (5 GB)。如果指定了较大值,则使用 5368709120

如果 EMRFS 客户端加密功能已禁用且 Amazon S3 优化的提交程序也处于禁用状态,则此值还可以控制数据文件的大小上限,相应数据文件可能会增大,直到 EMRFS 使用分段上载(而非 PutObject 请求)来上载文件。有关更多信息,请参阅

fs.s3n.ssl.enabled true 布尔值类型,指示使用 http 还是 https。
fs.s3.buckets.create.enabled false 布尔值类型,指示是否应在存储桶不存在时创建存储桶。设置为 false 会导致 CreateBucket 操作出现异常。
fs.s3.multipart.clean.enabled false 布尔值类型,指示是否要启用后台定期清理未完成的分段上载。
fs.s3.multipart.clean.age.threshold 604800 long 类型,用于指定分段上载的最小有效期(以秒为单位),然后考虑对其进行清理。默认有效期为一周。
fs.s3.multipart.clean.jitter.max 10000 整数类型,指定在安排下一轮清理之前最大随机抖动的延迟(以秒为单位)增至 15 分钟的固定延迟。

禁用分段上传

注意

我们重新设计了 Amazon EMR 控制台,以便其易于使用。请参阅 控制台中的新增功能,以了解有关新旧控制台体验差异的信息。

New console
使用新控制台禁用分段上传
  1. 登录 Amazon Web Services Management Console 并打开 Amazon EMR 控制台,网址为 https://console.aws.amazon.com/emr

  2. 在左侧导航窗格中的 EMR on EC2 下,选择 Clusters(集群),然后选择 Create cluster(创建集群)。

  3. Software Settings(软件设置)下,输入下面的配置:classification=core-site,properties=[fs.s3n.multipart.uploads.enabled=false]

  4. 选择适用于集群的任何其他选项。

  5. 要启动集群,选择 Create cluster(创建集群)。

Old console
使用旧控制台禁用分段上传
  1. 导航到 Amazon EMR 新控制台,然后从侧面导航栏中选择切换到旧控制台。有关切换到旧控制台后预期情况的更多信息,请参阅 Using the old console

  2. 依次选择 Create cluster (创建集群)Go to advanced options (转到高级选项)

  3. Edit Software Settings(编辑软件设置)下,输入下面的配置:classification=core-site,properties=[fs.s3n.multipart.uploads.enabled=false]

  4. 继续创建集群。

CLI
使用 Amazon CLI 禁用分段上载

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

  1. 使用以下内容创建一个文件 (myConfig.json),并将其保存到您在其中运行该命令的同一目录中:

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

    注意

    为了便于读取,包含 Linux 行继续符(\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字号 (^)。

    aws emr create-cluster --name "Test cluster" \ --release-label emr-5.36.1 --applications Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge \ --instance-count 3 --configurations file://myConfig.json
CLI
使用 API 禁用分段上传

最佳实践

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

启用版本控制

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

清理失败的分段上载

默认情况下,EMR 集群组件通过 Amazon SDK for Java 与 Amazon S3 API 结合来使用分段上载,以将日志文件和输出数据写入 Amazon S3。有关使用 Amazon EMR 更改与此配置相关的属性的信息,请参阅为 Amazon S3 配置分段上载。有时,上载大型文件会生成未完成的 Amazon S3 分段上载。在分段上载无法成功完成时,进行中的分段上载将继续占用存储桶并会产生存储费用。我们建议采用下列选项,以避免文件存储过多:

  • 对于与 Amazon EMR 结合使用的存储桶,启用 Amazon S3 中的生命周期配置,以在上载启动日期三天后删除仍未完成的分段上载。利用生命周期配置规则,您可以创建控制对象的存储类和生命周期。有关更多信息,请参阅对象生命周期管理使用存储桶生命周期策略中止未完成的分段上载

  • 通过将 fs.s3.multipart.clean.enabled 设置为 TRUE 并调整其它清理参数来启用 Amazon EMR 的分段清理功能。此功能可用于正常运行时间有限的高容量、大规模集群。在这种情况下,生命周期配置规则的 DaysAfterIntitiation 参数可能太长,即使设置为最小参数,也会导致 Amazon S3 存储中迅猛增加。Amazon EMR 的分段清理功能有便于实现更精确的控制。有关更多信息,请参阅为 Amazon S3 配置分段上载

管理版本标记

我们建议您在 Amazon S3 中启用生命周期配置规则,以删除您与 Amazon EMR 结合使用的启用了版本控制的存储桶的过期对象删除标记。删除受版本控制的存储桶中的对象时将创建删除标记。如果对象的所有早期版本随后过期,则存储桶中将保留过期的对象删除标记。虽然您无需为删除标记付费,但删除过期的标记可提高 LIST 请求的性能。有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的在启用了版本控制的存储桶中进行生命周期配置

性能最佳实践

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