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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将数据上传到 Amazon S3 Express One Zone

概述

在 Amazon EMR 6.15.0 及更高版本中,您可以将带有 Apache Spark 的 Amazon EMR 与 Amazon S3 Express One Zone 存储类结合使用,以提高 Spark 作业的性能。S3 Express One Zone 是一种 S3 存储类,适用于频繁访问每秒数十万个请求的数据的应用程序。S3 Express One Zone 在其发布时,提供了 Amazon S3 中延迟最低、性能最高的云对象存储。

先决条件

  • S3 Express One Zone 权限 – 当 S3 Express One Zone 在 S3 对象上最初调用 GETLISTPUT 等操作时,存储类会代表您调用 CreateSession。您的 IAM policy 必须允许 s3express:CreateSession 权限,S3A 连接器才能调用 CreateSession API。有关使用此权限的示例策略,请参阅 开始使用 Amazon S3 Express One Zone

  • S3A 连接器 – 要将您的 Spark 集群配置为从使用 S3 Express One Zone 存储类的 Amazon S3 存储桶中访问数据,您必须使用 Apache Hadoop 连接器 S3A。要使用连接器,请确保所有 S3 URI 都使用 s3a 方案。如果他们没有使用,则可以更改用于 s3s3n 方案的文件系统实施。

要更改 s3 方案,请指定以下集群配置:

[ { "Classification": "core-site", "Properties": { "fs.s3.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem", "fs.AbstractFileSystem.s3.impl": "org.apache.hadoop.fs.s3a.S3A" } } ]

要更改 s3n 方案,请指定以下集群配置:

[ { "Classification": "core-site", "Properties": { "fs.s3n.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem", "fs.AbstractFileSystem.s3n.impl": "org.apache.hadoop.fs.s3a.S3A" } } ]

开始使用 Amazon S3 Express One Zone

创建权限策略

在创建使用 Amazon S3 Express One Zone 的集群之前,您必须创建一个 IAM policy 以附加到该集群的 Amazon EC2 实例配置文件。策略必须具有访问 S3 Express One Zone 存储类的权限。以下示例策略显示如何授予所需的权限。创建策略后,将策略附加到您用于创建 EMR 集群的实例配置文件角色,如 创建和配置集群 部分所述。

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Resource": "arn:aws:s3express:region-code:account-id:bucket/DOC-EXAMPLE-BUCKET", "Action": [ "s3express:CreateSession" ] } ] }

创建和配置集群

接下来,创建一个运行带有 S3 Express One Zone 的 Spark 的集群。以下步骤描述了在 Amazon Web Services Management Console中创建集群的高级概述:

  1. 导航到 Amazon EMR 控制台,然后从边栏中选择集群。然后选择创建集群

  2. 选择 Amazon EMR 发行版 emr-6.15.0 或更高版本。

  3. 选择 Spark 交互式应用程序捆绑包,然后选择您可能想要包含在集群中的任何其他应用程序。您的集群上必须至少包含 Spark 和 Hadoop。

  4. 要启用 Amazon S3 Express One Zone,请在软件设置部分输入与以下示例类似的配置。配置和建议的值将在此过程之后的 配置概述 部分中介绍。

    [ { "Classification": "core-site", "Properties": { "fs.s3a.aws.credentials.provider": "software.amazon.awssdk.auth.credentials.InstanceProfileCredentialsProvider", "fs.s3a.change.detection.mode": "none", "fs.s3a.endpoint.region": "aa-example-1", "fs.s3a.select.enabled": "false" } }, { "Classification": "spark-defaults", "Properties": { "spark.sql.sources.fastS3PartitionDiscovery.enabled": "false" } } ]
  5. Amazon EMR 的 EC2 实例配置文件部分,选择使用现有角色,然后使用附加了您在上述 创建权限策略 部分中创建的策略的角色。

  6. 根据您的应用程序配置集群设置的其余部分,然后选择创建集群

配置概述

下表描述了在设置集群时应指定的配置和建议值,该集群将 S3 Express One Zone 与 Amazon EMR 结合使用,如 创建和配置集群 部分所述。

S3A 配置

参数 默认值 建议值 说明

fs.s3a.aws.credentials.provider

如果未指定,请按以下顺序使用 AWSCredentialProviderListTemporaryAWSCredentialsProviderSimpleAWSCredentialsProviderEnvironmentVariableCredentialsProviderIAMInstanceCredentialsProvider

software.amazon.awssdk.auth.credentials.InstanceProfileCredentialsProvider

Amazon EMR 实例配置文件角色应具有允许 S3A 文件系统调用 s3express:CreateSession 的策略。如果其他凭证提供程序拥有 S3 Express One Zone 权限,它们也可以使用。

fs.s3a.endpoint.region

null

您创建存储桶 Amazon Web Services 区域 的位置。

区域解析逻辑不适用于 S3 Express One Zone 存储类。

fs.s3a.select.enabled

true

false

S3 Express One Zone 存储类不支持 Amazon S3 select

fs.s3a.change.detection.mode

server

none

通过检查基于 MD5 的 etags 进行由 S3A 进行的更改检测。S3 Express One Zone 存储类不支持 MD5 checksums

Spark 配置

参数 默认值 建议值 说明

spark.sql.sources.fastS3PartitionDiscovery.enabled

true

false

内部优化使用 S3 Express One Zone 存储类不支持的 S3 API 参数。

注意事项

将 Apache Spark on Amazon EMR 与 S3 Express One Zone 存储类集成时,请考虑以下几点:

  • Amazon EMR 发行版 6.15.0 及更高版本支持 Amazon S3 Express One Zone。

  • 将 S3 Express One Zone 与 Amazon EMR 结合使用时需要 S3A 连接器。只有 S3A 具有与 S3 Express One Zone 交互所需的功能和存储类。有关设置连接器的步骤,请参阅 先决条件

  • 只有在 Amazon EC2 上运行的 Amazon EMR 集群上的 Spark 才支持 Amazon S3 Express One Zone 存储类。

  • Amazon S3 Express One Zone 存储类仅支持 SSE-S3 加密。有关更多信息,请参阅使用 Amazon S3 托管密钥的服务器端加密(SSE-S3)

  • Amazon S3 Express One Zone 存储类不支持使用 S3A FileOutputCommitter 写入。在 S3 Express One Zone 存储桶上使用 S3A FileOutputCommitter 写入会导致错误:InvalidStorageClass: The storage class you specified is not valid

  • Amazon EMR Serverless 或 EKS 上的 Amazon EMR 不支持 Amazon S3 Express One Zone 存储类。