Amazon SageMaker Studio 노트북에서 Amazon EMR 클러스터에 연결하려고 할 때 발생하는 연결 시간 초과 오류를 해결하고 싶습니다.
해결 방법
연결 시간 초과 오류는 SageMaker Studio 또는 Amazon EMR 클러스터의 다음과 관련된 네트워크 구성 문제로 인해 발생할 수 있습니다.
- Amazon Virtual Private Cloud(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 클러스터 모두에 대해 이 검사를 수행합니다.
- 해당 도메인과 Amazon Elastic File System(Amazon EFS) 볼륨 사이에 포트 2049를 통한 NFS 트래픽을 허용하는 인바운드 규칙이 SageMaker Studio의 보안 그룹에 있는지 확인합니다.
- 포트 8998을 통한 사용자 지정 TCP에 대한 인바운드 규칙이 EMR 클러스터 프라이머리 노드 보안 그룹에 있는지 확인합니다. 이 규칙은 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 노트북 작성