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

上传数据到 Amazon S3

有关如何将对象上传到 Amazon S3 的信息,请参阅 Amazon Simple Storage Service 入门指南中的将对象添加到存储桶。有关将 Amazon S3 与 Hadoop 结合使用的更多信息,请参阅 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 开发人员指南中的存储桶局限和限制

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

请参阅以下资源:

注意

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

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

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

为 Amazon S3 配置分段上传

借助适用于 Java 的 AWS 开发工具包,Amazon EMR 支持 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 true 布尔值类型,指示是否应在存储桶不存在时创建存储桶。设置为 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 控制台禁用分段上传

此过程介绍了如何在创建集群时使用 Amazon EMR 控制台禁用分段上传。

禁用分段上传

  1. 通过以下网址打开 Amazon EMR 控制台:https://console.amazonaws.cn/elasticmapreduce/

  2. Choose Create cluster, Go to advanced options.

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

  4. 继续创建集群.

使用 AWS CLI 禁用分段上传

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

使用 AWS CLI 禁用分段上传

  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.20.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 开发人员指南中的使用适用于 Java 的 AWS 开发工具包进行分段上传

有关适用于 Java 的 AWS 开发工具包的更多信息,请参阅适用于 Java 的 AWS 开发工具包

最佳实践

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

启用版本控制

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

清理失败的分段上传

默认情况下,EMR 集群组件通过适用于 Java 的 AWS 开发工具包与 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 开发人员指南中的请求速率和性能注意事项