将数据上传到 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 作业的性能。亚马逊 EMR 7.2.0 及更高版本还支持 Flink 和 Hive HBase,因此,如果你使用这些应用程序,你也可以从 S3 Express One Zone 中受益。S3 Express One Zone 是一种 S3 存储类,适用于频繁访问每秒数十万个请求的数据的应用程序。S3 Express One Zone 在其发布时,提供了 Amazon S3 中延迟最低、性能最高的云对象存储。

先决条件

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

  • S3A 连接器 — 要将您的 Spark 集群配置为访问使用 S3 Express One Zone 存储类的 Amazon S3 存储桶中的数据,您必须使用 Apache Hadoop 连接器 S3A。 要使用连接器,请确保所有 S3 都 URIs 使用该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 区域的集群之前,您必须创建一个 IAM 策略以附加到该集群的 Amazon EC2 实例配置文件。策略必须具有访问 S3 Express One Zone 存储类的权限。以下示例策略显示如何授予所需的权限。创建策略后,将策略附加到您用于创建 EMR 集群的实例配置文件角色,如 创建和配置集群 部分所述。

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

创建和配置集群

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

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

  2. 如果使用 Spark,请选择 Amazon EMR emr-6.15.0 或更高版本。如果您使用 HBase Flink 或 Hive,请选择emr-7.2.0或更高。

  3. 选择要包含在集群中的应用程序,例如 Spark HBase、或 Flink。

  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

更改检测依据 S3A 通过检查来起作用 MD5基于etags。S3 Express One Zone 存储类不支持 MD5 checksums.

Spark 配置

参数 默认值 建议值 说明

spark.sql.sources.fastS3PartitionDiscovery.enabled

true

false

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

Hive 配置

参数 默认值 建议值 说明

hive.exec.fast.s3.partition.discovery.enabled

true

false

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

注意事项

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

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

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

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

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

  • 亚马逊 EMR 版本 6.15.0 及更高版本在 EMR 上支持亚马逊 S3 Express One Zone。 EC2此外,Amazon EMR on EKS 和 Amazon EMR Serverless 上的 Amazon EMR 7.2.0 及更高版本也支持此功能。