我想解决我在尝试从 Amazon SageMaker Studio 笔记本电脑连接到 Amazon EMR 集群时收到的连接超时错误。
解决方法
连接超时错误可能是由网络配置问题引起的,而这些网络配置问题与 SageMaker Studio 或 Amazon EMR 集群的以下配置有关:
- Amazon Virtual Private Cloud (Amazon VPC)
- 子网
- 安全组
确保满足以下连接先决条件:
- SageMaker Studio 在仅限 VPC 模式下启动。
- Amazon EMR 集群和 SageMaker Studio 笔记本电脑在同一 VPC 中启动。如果它们位于不同的 VPC 中,则通过 VPC 对等连接进行连接。如果 VPC 对等连接用于跨区域使用案例,则必须手动配置 /etc/sparkmagic/config.json 配置文件。这是因为 Amazon EMR 集群的发现功能目前不支持跨区域连接。有关更多信息,请参阅在 Amazon EMR 中构建由 Spark 提供支持的 Amazon SageMaker 笔记本电脑。
- Amazon EMR 集群启动时安装了 Apache Spark 和 Apache Livy 应用程序。
要解决连接超时错误,请执行以下操作:
1. 执行以下检查:
- 确保安全组或网络访问控制列表(ACL)配置正确,允许流量通过 8998 端口。对 SageMaker Studio 笔记本电脑和 Amazon EMR 集群执行此检查。
- 确保 SageMaker Studio 的安全组有入站规则,允许在域和 Amazon Elastic File System (Amazon EFS) 卷之间通过 2049 端口传输 NFS 流量。
- 确保 EMR 集群的主节点安全组有通过 8998 端口的自定义 TCP 入站规则。此规则可以指定 Studio 的安全组,也可以指定包含 Studio 子网的 CIDR。
**注意:**如果您使用的是 VPC 对等连接,请参阅更新您的安全组以引用对等安全组。本文档提供了有关如何从跨账户 VPC 中指定安全组的信息。如果 Amazon EMR 和 Studio 子网之间有 VPC 对等连接,则相应的路由表必须相互路由流量。如果它们没有正确路由流量,那么您会收到 ConnectTimeoutError(连接超时错误)错误。
2. 如果您在没有 NAT 网关的情况下以仅限 VPC 模式设置私有子网,请分别为 EMR 和 AWS Security Token Service (AWS STS) 创建以下 AWS PrivateLink 接口端点:
.elasticmapreduce**
.sts**
这些端点必须在用于 EMR 集群和 SageMaker Studio 的 VPC 下创建。
AWS STS 是一项全球服务。因此,当您尝试从 us-east-1 以外区域的 Studio 连接到跨账户 Amazon EMR 集群时,您可能会收到 ConnectTimeoutError(连接超时错误)错误:
ConnectTimeoutError: Connect timeout on endpoint URL: "https://sts.amazonaws.com/"
要解决此错误,请在运行 connect 命令之前,在 Jupyter notebook 中将环境变量 AWS_STS_REGIONAL_ENDPOINTS 设置为 regional:
%env AWS_STS_REGIONAL_ENDPOINTS=regional
%load_ext sagemaker_studio_analytics_extension.magics
%sm_analytics emr connect --cluster-id example-cluster-id --auth-type None --assumable-role-arn arn:aws:iam::example-cross-account:role/example-role-name
有关区域端点的更多信息,请参阅管理 AWS 区域中的 AWS STS 和 AWS STS 区域化端点。
3. 要检查连接是否正常,请打开您的 Studio 笔记本电脑,选择 Sparkmagic 内核,然后在单元格中运行以下命令:
对于同一账户内的连接:
%local
!sm-sparkmagic connect --cluster-id <cluster-id>
对于跨账户连接:
%local
# If needed, use STS Regional endpoint
%env AWS_STS_REGIONAL_ENDPOINTS=regional
!sm-sparkmagic connect --cluster-id <cluster-id> --role-arn arn:aws:iam::<cross-account>:role/<role-name>
-或者-
从 EMR 主节点私有 IP 上的笔记本电脑终端运行以下命令:
curl <EMR-Master-Private-IP>:8998/sessions -v
执行以下检查以确保配置准确无误:
通过 SSH 进入 EMR 集群,以获取 Livy 服务的 PID:
ps -ef | grep livy
检查 Livy 服务运行的端口:
sudo netstat -anp | grep <PID>
确保该服务在 Livy 的默认端口 (8998) 上运行。
相关信息
从 SageMaker Studio 创建和管理 Amazon EMR 集群以运行交互式 Spark 和 ML 工作负载 – 第 1 部分
从 SageMaker Studio 创建和管理 Amazon EMR 集群以运行交互式 Spark 和 ML 工作负载 – 第 2 部分
在 Amazon EMR 中构建由 Spark 提供支持的 Amazon SageMaker 笔记本电脑