我想解決當我試圖從 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/"
若要解決這個錯誤,在運行連線命令之前,在 Jupyter 筆記本內將環境變數 AWS_STS_REGIONAL_ENDPOINTS 設置為區域性:
%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 筆記本