當我從 Amazon SageMaker Studio 筆記本連線到 Amazon EMR 叢集時,如何解決 ConnectTimeoutError 錯誤?

上次更新日期:2022 年 11 月 14 日

我想解決當我試圖從 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 界面端點:

  • com.amazonaws. .elasticmapreduce
  • com.amazonaws. .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 STSAWS 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)上運行。