本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将数据上传到 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 对象上最初调用
GET
、LIST
或PUT
等操作时,存储类会代表您调用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
方案。如果他们没有使用,则可以更改用于s3
和s3n
方案的文件系统实施。
要更改 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中创建集群的高级概述:
-
导航到 Amazon EMR 控制台,然后从边栏中选择集群。然后选择创建集群。
-
如果使用 Spark,请选择 Amazon EMR
emr-6.15.0
或更高版本。如果您使用 HBase Flink 或 Hive,请选择emr-7.2.0
或更高。 -
选择要包含在集群中的应用程序,例如 Spark HBase、或 Flink。
-
要启用 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" } } ] -
在 Amazon EMR 的EC2 实例配置文件部分,选择使用现有角色,然后使用附有您在上一创建权限策略节中创建的策略的角色。
-
根据您的应用程序配置集群设置的其余部分,然后选择创建集群。
配置概述
下表描述了在设置集群时应指定的配置和建议值,该集群将 S3 Express One Zone 与 Amazon EMR 结合使用,如 创建和配置集群 部分所述。
S3A 配置
参数 | 默认值 | 建议值 | 说明 |
---|---|---|---|
|
如果未指定,请按以下顺序使用 |
|
Amazon EMR 实例配置文件角色的策略应允许 S3A 要调用的 |
|
null |
您创建存储桶 Amazon Web Services 区域 的位置。 |
区域解析逻辑不适用于 S3 Express One Zone 存储类。 |
|
|
|
S3 Express One Zone 存储类不支持 Amazon S3 |
|
|
none |
更改检测依据 S3A 通过检查来起作用 MD5基于 |
Spark 配置
参数 | 默认值 | 建议值 | 说明 |
---|---|---|---|
|
|
false
|
内部优化使用 S3 Express One Zone 存储类不支持的 S3 API 参数。 |
Hive 配置
参数 | 默认值 | 建议值 | 说明 |
---|---|---|---|
|
|
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 及更高版本也支持此功能。