注意事项和限制 - Amazon EMR

注意事项和限制

使用 EMR Studio 时请考虑以下事项:

  • EMR Studio 已在下列AWS区域开放:美国东部(弗吉尼亚北部、俄亥俄)、美国西部(加利福尼亚北部、俄勒冈)、亚太地区(孟买、首尔、新加坡、悉尼、东京)、加拿大(中部)、欧洲(法兰克福、爱尔兰、伦敦、巴黎、斯德哥尔摩)和南美洲(圣保罗)。

  • EMR Studio 适用于 Amazon EMR 版本 5.32.0(EMR 5.x 系列)或 6.2.0(EMR 6.x 系列)及更高版本。

  • 要让用户为 Workspace 预置在 Amazon EC2 上运行的新 EMR 集群,请将 EMR Studio 与一组集群模板关联起来。管理员可以使用 AWS Service Catalog 定义集群模板,并且可以选择用户或组是可以访问 Studio 中的集群模板,还是不能访问任务集群模板。

  • 当您定义对存储在 Amazon S3 中的笔记本文件的访问权限或从 AWS Secrets Manager 读取密钥时,请使用 EMR 服务角色。不支持使用会话策略定义这些权限。

  • 您可以创建多个 EMR Studio 来控制对不同 VPC 中的 EMR 集群的访问。

  • 请使用 AWS CLI 设置 Amazon EMR on EKS 集群。然后,您可以使用 Studio 界面通过托管式终端节点将集群附加到 Workspaces,以运行笔记本任务。

  • EMR Studio 不支持以下 Python 魔术命令:

    • %alias

    • %alias_magic

    • %automagic

    • %macro

    • %%js

    • %%javascript

    • 使用 %configure 修改 proxy_user

    • 使用 %env%set_env 修改 KERNEL_USERNAME

  • Amazon EMR on EKS 集群不支持 EMR Studio 的 SparkMagic 命令。

  • 要在笔记本单元格中编写多行 Scala 语句,请确保除最后一行以外的所有其他行均以句点结束。下面的示例对多行 Scala 语句使用了正确的句法。

    val df = spark.sql("SELECT * from table_name). filter("col1=='value'"). limit(50)

已知问题

  • 在创建 Studio 之前,请确保在浏览器中禁用了 FoxyProxy 或 SwitchyOmega 等代理管理工具。当您选择 Create Studio (创建 Studio) 时,活动代理可能会导致错误,并导致出现 Network Failure (网络故障) 错误消息。

  • 由于超时问题,在 Amazon EMR on EKS 集群上运行的内核会无法启动。如果您在启动内核时遇到错误或问题,请关闭笔记本文件、关闭内核,然后重新打开笔记本文件。

  • 当您使用 Amazon EMR on EKS 集群时,Restart kernel (重新启动内核) 操作将无法按预期工作。在您选择 Restart kernel (重新启动内核) 后,请刷新 Workspace 以使重启生效。

  • 如果 Workspace 未附加到集群,则当 Studio 用户打开笔记本文件并尝试选择内核时会显示一条错误消息。您可以通过选择 Ok (确定) 忽略此错误消息,但您必须先将 Workspace 附加到集群并选择内核,然后才能运行笔记本代码。

  • 当您使用具有安全配置的 Amazon EMR 6.2.0 来设置集群安全时,Workspace 界面显示为空白并且无法按预期工作。如果您要为集群的 EMRFS 配置数据加密或 Amazon S3 授权,我们建议您使用其它受支持的 EMR 版本。EMR Studio 适用于 Amazon EMR 版本 5.32.0(EMR 5.x 系列)或 6.2.0(EMR 6.x 系列)及更高版本。

  • 当您从笔记本文件启动集群上 Spark UI 时,您可以在运行笔记本代码后查看有关任务的信息。但是,当您从 Studio 中 Clusters (集群) 列表启动 Spark 历史记录服务器时,任务可能将有长达两分钟的时间不显示。

  • 当您调试 Amazon EC2 任务上运行的 Amazon EMR时,指向集群上 Spark UI 的链接可能无法正常工作或无法显示。要重新生成链接,请创建一个新的笔记本单元格并运行 %%info 命令。

  • Jupyter Enterprise Gateway 不会在以下 Amazon EMR 发行版本中清理集群主节点 (master node) 上的空闲内核:5.32.0、5.33.0、6.2.0 和 6.3.0。空闲内核消耗计算资源,这可能会导致长时间运行的集群出现故障。您可以使用以下示例脚本为 Jupyter Enterprise Gateway 配置空闲内核清理。您可以使用 SSH 连接到主节点 (master node) ,或以步骤的形式提交脚本。有关更多信息,请参阅在 Amazon EMR 集群上运行命令和脚本

    #!/bin/bash sudo tee -a /emr/notebook-env/conf/jupyter_enterprise_gateway_config.py << EOF c.MappingKernelManager.cull_connected = True c.MappingKernelManager.cull_idle_timeout = 10800 c.MappingKernelManager.cull_interval = 300 EOF sudo systemctl daemon-reload sudo systemctl restart jupyter_enterprise_gateway
  • 当您将自动终止策略与 Amazon EMR 版本 5.32.0、5.33.0、6.2.0 或 6.3.0 配合使用时,EMR 会将集群标记为空闲,即使您有活动的 Python3 内核,也有可能自动终止该集群。这是因为执行 Python3 内核不会在该集群上提交 Spark 作业。要将自动终止与 Python3 内核配合使用,我们建议您使用 Amazon EMR 版本 6.4.0 或更高版本。有关自动终止的更多信息,请参阅 使用自动终止策略

  • 当您使用 %%display 要在表格中显示 Spark DataFrame 时,非常宽的表格可能会被截断。您可以右键单击输出,然后选择 Create New View for Output(为输出创建新视图),以获取输出的可滚动视图。

  • 启动基于 Spark 的内核(如 PySpark、Spark 或 SparkR)将启动 Spark 会话,在笔记本中运行单元格会将该会话中的 Spark 作业排队。当您中断正在运行的单元格时,Spark 作业将继续运行。要停止 Spark 作业,您应该使用集群上的 Spark UI。有关如何连接到 Spark UI 的说明,请参阅 使用 EMR Studio 调试应用程序和任务

功能限制

Amazon EMR Studio 不支持以下 Amazon EMR 功能:

  • 在使用指定 Kerberos 身份验证的安全配置创建的 EMR 集群上附加和运行任务

  • 具有多个主节点 (master node) 的集群

  • 与 AWS Lake Formation 集成的集群

  • 使用基于 AWS Graviton2 的 Amazon EC2 实例的集群

EMR Studio 的 Service Limits

下表呈现了 EMR Studio 的服务限制。

项目 限制
EMR Studio 每个AWS账户最多 10 个
子网 每个 EMR Studio 最多关联 5 个
IAM Identity Center 组 每个 EMR Studio 最多分配 5 个
IAM Identity Center 用户 每个 EMR Studio 最多分配 100 个

VPC 和子网最佳实践

使用以下最佳实践为 EMR Studio 设置带有子网的 Amazon Virtual Private Cloud (Amazon VPC):

  • 您最多可以在 VPC 中指定五个子网与 Studio 关联。我们建议您在不同的可用区中提供多个子网,以便支持 Workspace 可用性,并为 Studio 用户提供跨不同可用区访问集群的权限。要了解有关使用 VPC、子网和可用区的更多信息,请参阅《Amazon Virtual Private Cloud 用户指南》中的 VPC 和子网

  • 您指定的子网应能相互通信。

  • 要让用户将 Workspace 链接到公共托管的 Git 存储库,您应仅指定有权通过网络地址转换 (NAT) 访问互联网的私有子网。有关为 Amazon EMR 设置私有子网的更多信息,请参阅 私有子网

  • 当您将 Amazon EMR on EKS 与 EMR Studio 配合使用时,您的 Studio 与用于注册虚拟集群的 Amazon EKS 集群之间必须有至少一个公有子网。否则,您的托管式终端节点将不会作为选项显示在 Studio Workspace 中。您可以创建 Amazon EKS 集群并将其与属于 Studio 的子网关联,或创建 Studio 并指定您的 EKS 集群子网。有关更多信息,请参阅为 Amazon EMR Studio 设置 Amazon EMR on EKS

  • 如果您计划通过 EMR Studio 使用 Amazon EMR on EKS,请选择同一 VPC 作为您的 Amazon EKS 集群 Worker 节点。

Amazon EMR Studio 的集群要求

在 Amazon EC2 上运行的 Amazon EMR 集群

您为 EMR Studio Workspace 创建的在 Amazon EC2 上运行的所有 Amazon EMR 集群都必须满足以下要求。您使用 EMR Studio 界面创建的集群会自动满足这些要求。

  • 集群必须使用 Amazon EMR 版本 5.32.0(EMR 5.x 系列)或 6.2.0(EMR 6.x 系列)及更高版本。您可以使用 Amazon EMR 控制台、AWS Command Line Interface 或 SDK 创建集群,然后将其附加到 EMR Studio Workspace。Studio 用户也可以在创建 Amazon EMR Workspace 或在其中工作时预置和附加集群。有关更多信息,请参阅将集群附加到 Workspace

  • 集群必须在 Amazon Virtual Private Cloud 中启动。不支持 EC2-Classic 平台。

  • 集群必须安装有 Spark、Livy 和 Jupyter Enterprise Gateway。如果您计划将集群用于 SQL Explorer,则应同时安装 Presto 和 Spark。

  • 要使用 SQL Explorer,集群必须使用 Amazon EMR 版本 5.34.0 或更高版本或者 6.4.0 或更高版本并安装了 Presto。如果要将 AWS Glue 数据目录指定为 Presto 的 Hive 元数据仓,则必须在集群上进行配置。有关更多信息,请参阅将 Presto 与 AWS Glue 数据目录结合使用

  • 集群必须在网络地址转换 (NAT) 的私有子网中启动,公共托管的 Git 存储库与 EMR Studio 才能配合使用。

当您使用 EMR Studio 时,我们建议使用以下集群配置。

  • 将 Spark 会话的部署模式设置为集群模式。集群模式将应用程序主进程放置在核心节点上,而不是集群的主节点上。这样做可以减轻主节点的潜在内存压力。有关更多信息,请参阅 Apache Spark 文档中的集群模式概述

  • 如下面的示例配置所示,将 Livy 超时从默认的 1 小时更改为 6 小时。

    { "classification":"livy-conf", "Properties":{ "livy.server.session.timeout":"6h", "livy.spark.deploy-mode":"cluster" } }
  • 创建包含多达 30 个实例的多样化实例队列,并在竞价型实例队列中选择多种实例类型。例如,您可以为 Spark 工作负载指定以下内存优化的实例类型:r5.2x、r5.4x、r5.8x、r5.12x、r5.16x、r4.2x、r4.4x、r4.8x、r4.12 等。有关更多信息,请参阅配置实例集

  • 将容量优化的分配策略用于竞价型实例,以帮助 Amazon EMR 根据来自 Amazon EC2 的实时容量洞察进行有效的实例选择。有关更多信息,请参阅实例集的分配策略

  • 在集群上启用托管式扩缩。将最大核心节点参数设置为您计划使用的最小持久性容量,并在竞价型实例上运行的充分多样化的任务队列上配置扩缩以节省成本。有关更多信息,请参阅在 Amazon EMR 中使用 EMR 托管扩展

我们还会敦促您始终启用 Amazon EMR Block Public Access(阻止公开访问),同时限制入站 SSH 流量进入可信来源。对集群的入站访问允许用户在集群上运行笔记本。有关更多信息,请参阅使用 Amazon EMR 阻止公有访问使用安全组控制网络流量

Amazon EMR on EKS 集群

除了在 Amazon EC2 上运行的 EMR 集群之外,您还可以使用 AWS CLI 为 EMR Studio 设置和管理 Amazon EMR on EKS 集群。请使用以下准则设置 EMR on EKS 集群:

  • 针对 Amazon EMR on EKS 集群创建托管式 HTTPS 终端节点。用户将 Workspace 附加到托管式终端节点。您用于注册虚拟集群的 Amazon Elastic Kubernetes Service (EKS) 集群必须具有私有子网才能启用托管式终端节点。

  • 如果您想使用公共托管的 Git 存储库,请使用具有至少一个私有子网和网络地址转换 (NAT) 的 Amazon EKS 集群。

  • 避免使用 Amazon EKS 优化的 Arm Amazon Linux AMI,因为 EMR on EKS 托管式终端节点不支持。

  • 避免使用仅限 AWS Fargate 的 Amazon EKS 集群,因为不受支持。

有关更多信息,请参阅为 Amazon EMR Studio 设置 Amazon EMR on EKS