Amazon S3 on Outposts 与本地 Amazon EMR on Outposts - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon S3 on Outposts 与本地 Amazon EMR on Outposts

Amazon EMR 是一个托管式集群平台,可简化在 Amazon 上运行大数据框架(如 Apache Hadoop 和 Apache Spark)以处理和分析海量数据的操作。通过使用这些框架和相关的开源项目,您可以处理用于分析目的的数据和业务情报工作负载。Amazon EMR 还可以协助您转换大量数据并将数据移入/移出其它 Amazon 数据存储和数据库,并支持 Amazon S3 on Outposts。有关更多信息,请参阅《Amazon EMR 管理指南》中的 Amazon EMR on Outposts

对于 Amazon S3 on Outposts,Amazon EMR 在版本 7.0.0 中开始支持 Apache Hadoop S3A 连接器。早期版本的 Amazon EMR 不支持本地 S3 on Outposts,也不支持 EMR 文件系统(EMRFS)。

受支持的应用程序

Amazon EMR 与 Amazon S3 on Outposts 结合使用可支持以下应用程序:

  • Hadoop

  • Spark

  • Hue

  • Hive

  • Sqoop

  • Pig

  • Hudi

  • Flink

有关更多信息,请参阅《Amazon EMR 版本指南》

创建和配置 Amazon S3 on Outposts 桶

Amazon EMR 将 Amazon SDK for Java 与 Amazon S3 on Outposts 结合使用来存储输入数据和输出数据。您的 Amazon EMR 日志文件存储在您选择的区域 Amazon S3 位置,而不是本地存储在 Outpost 上。有关更多信息,请参阅《Amazon EMR 管理指南》中的 Amazon EMR 日志

为了符合 Amazon S3 和 DNS 的要求,S3 on Outposts 桶具有命名限制和局限性。有关更多信息,请参阅创建 S3 on Outposts 存储桶

在 Amazon EMR 版本 7.0.0 及更高版本中,您可以将 Amazon EMR 与 S3 on Outposts 和 S3A 文件系统结合使用。

先决条件

S3 on Outposts 权限 – 当您创建 Amazon EMR 实例配置文件时,您的角色必须包含 S3 on Outposts 的 Amazon Identity and Access Management(IAM)命名空间。S3 on Outposts 具有自己的命名空间 s3-outposts*。有关使用此命名空间的示例策略,请参阅使用 S3 on Outposts 设置 IAM

S3A 连接器 – 要将您的 EMR 集群配置为访问 Amazon S3 on Outposts 桶中的数据,您必须使用 Apache Hadoop S3A 连接器。要使用该连接器,请确保所有 S3 URI 都使用 s3a 方案。如果不是这样,您可以配置用于 EMR 集群的文件系统实现,以便 S3 URI 可以与 S3A 连接器结合使用。

要将文件系统实现配置为与 S3A 连接器结合使用,请为 EMR 集群使用 fs.file_scheme.implfs.AbstractFileSystem.file_scheme.impl 配置属性,其中 file_scheme 对应于您拥有的 S3 URI 类型。要使用以下示例,请将 user input placeholders 替换为您自己的信息。例如,要更改使用 s3 方案的 S3 URI 的文件系统实现,请指定以下集群配置属性:

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

要使用 S3A,请将 fs.file_scheme.impl 配置属性设置为 org.apache.hadoop.fs.s3a.S3AFileSystem,并将 fs.AbstractFileSystem.file_scheme.impl 属性设置为 org.apache.hadoop.fs.s3a.S3A

例如,如果您要访问路径 s3a://bucket/...,请将 fs.s3a.impl 属性设置为 org.apache.hadoop.fs.s3a.S3AFileSystem,然后将 fs.AbstractFileSystem.s3a.impl 属性设置为 org.apache.hadoop.fs.s3a.S3A

开始将 Amazon EMR 与 Amazon S3 on Outposts 结合使用

以下主题介绍了如何开始将 Amazon EMR 与 Amazon S3 on Outposts 结合使用。

创建权限策略

在创建使用 Amazon S3 on Outposts 的 EMR 集群之前,您必须创建一个 IAM policy 以附加到该集群的 Amazon EC2 实例配置文件。该策略必须具有访问 S3 on Outposts 接入点 Amazon 资源名称(ARN)的权限。有关为 S3 on Outposts 创建 IAM policy 的更多信息,请参阅使用 S3 on Outposts 设置 IAM

以下示例策略显示如何授予所需的权限。创建策略后,将策略附加到您用于创建 EMR 集群的实例配置文件角色,如 创建和配置集群 部分所述。要使用此示例,请将 user input placeholders 替换为您自己的信息。

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Resource": "arn:aws:s3-outposts:us-west-2:111122223333:outpost/op-01ac5d28a6a232904/accesspoint/access-point-name, "Action": [ "s3-outposts:*" ] } ] }

创建和配置集群

要创建在 S3 on Outposts 中运行 Spark 的集群,请在控制台中完成以下步骤。

创建在 S3 on Outposts 中运行 Spark 的集群
  1. 通过以下链接打开 Amazon EMR 控制台:https://console.aws.amazon.com/elasticmapreduce/

  2. 在左侧导航窗格中,选择集群

  3. 选择创建集群

  4. 对于 Amazon EMR 版本,请选择 emr-7.0.0 或更高版本。

  5. 对于应用程序捆绑包,请选择 Spark 交互式。然后,选择要包含在集群中的任何其它受支持的应用程序。

  6. 要启用 Amazon S3 on Outposts,请输入您的配置设置。

    示例配置设置

    要使用以下示例配置设置,请将 user input placeholders 替换为您自己的信息。

    [ { "Classification": "core-site", "Properties": { "fs.s3a.bucket.DOC-EXAMPLE-BUCKET.accesspoint.arn": "arn:aws:s3-outposts:us-west-2:111122223333:outpost/op-01ac5d28a6a232904/accesspoint/access-point-name" "fs.s3a.committer.name": "magic", "fs.s3a.select.enabled": "false" } }, { "Classification": "hadoop-env", "Configurations": [ { "Classification": "export", "Properties": { "JAVA_HOME": "/usr/lib/jvm/java-11-amazon-corretto.x86_64" } } ], "Properties": {} }, { "Classification": "spark-env", "Configurations": [ { "Classification": "export", "Properties": { "JAVA_HOME": "/usr/lib/jvm/java-11-amazon-corretto.x86_64" } } ], "Properties": {} }, { "Classification": "spark-defaults", "Properties": { "spark.executorEnv.JAVA_HOME": "/usr/lib/jvm/java-11-amazon-corretto.x86_64", "spark.sql.sources.fastS3PartitionDiscovery.enabled": "false" } } ]
  7. 联网部分中,选择您的 Amazon Outposts 机架上的虚拟私有云(VPC)和子网。有关 Amazon EMR on Outposts 的更多信息,请参阅《Amazon EMR 管理指南》中的 Amazon Outposts 上的 EMR 集群

  8. Amazon EMR 的 EC2 实例配置文件部分,选择附加了您之前创建的权限策略的 IAM 角色。

  9. 配置剩余的集群设置,然后选择创建集群

配置概述

下表描述了 S3A 和 Spark 配置,以及在设置将 S3 on Outposts 与 Amazon EMR 结合使用的集群时要为这些配置的参数指定的值。

S3A 配置
参数 默认值 S3 on Outposts 的必需值 说明

fs.s3a.aws.credentials.provider

如果未指定,S3A 将在区域桶中查找具有 Outposts 桶名称的 S3。

S3 on Outposts 桶的接入点 ARN

Amazon S3 on Outposts 支持将纯 Virtual Private Cloud (VPC) 接入点作为访问 Outposts 存储桶的唯一方式。

fs.s3a.committer.name

file

magic

Magic 提交程序是 S3 on Outposts 唯一支持的提交程序。

fs.s3a.select.enabled

TRUE

FALSE

Outposts 上不支持 S3 Select。

JAVA_HOME

/usr/lib/jvm/java-8

/usr/lib/jvm/java-11-amazon-corretto.x86_64

S3A 上的 S3 on Outposts 需要 Java 版本 11。

Spark 配置
参数 默认值 S3 on Outposts 的必需值 说明

spark.sql.sources.fastS3PartitionDiscovery.enabled

TRUE

FALSE

S3 on Outposts 不支持快速分区。

spark.executorEnv.JAVA_HOME

/usr/lib/jvm/java-8

/usr/lib/jvm/java-11-amazon-corretto.x86_64

S3A 上的 S3 on Outposts 需要 Java 版本 11。

注意事项

当您将 Amazon EMR 与 S3 on Outposts 桶集成时,请考虑以下几点:

  • Amazon EMR 版本 7.0.0 及更高版本支持 Amazon S3 on Outposts。

  • 将 S3 on Outposts 与 Amazon EMR 结合使用时需要 S3A 连接器。只有 S3A 具有与 S3 on Outposts 桶交互所需的功能。有关 S3A 连接器设置的信息,请参阅先决条件

  • Amazon S3 on Outposts 对于 Amazon EMR 仅支持采用 Amazon S3 托管式密钥的服务器端加密(SSE-S3)。有关更多信息,请参阅S3 on Outposts 中的数据加密

  • Amazon S3 on Outposts 不支持使用 S3A FileOutputCommitter 进行写入。在 S3 on Outposts 桶上使用 S3A FileOutputCommitter 进行写入会导致以下错误:InvalidStorageClass:您指定的存储类无效

  • Amazon EMR Serverless 或 Amazon EMR on EKS 不支持 Amazon S3 on Outposts。

  • Amazon EMR 日志存储在您选择的区域 Amazon S3 位置,而不是本地存储在 S3 on Outposts 桶中。