Come posso risolvere l'errore ConnectTimeoutError quando mi connetto a un cluster Amazon EMR dal mio notebook Amazon SageMaker Studio?

Ultimo aggiornamento: 14/11/2022

Desidero risolvere l'errore di timeout della connessione che ricevo quando tento di connettermi a un cluster Amazon EMR dal mio notebook Amazon SageMaker Studio.

Soluzione

L'errore di timeout della connessione potrebbe verificarsi a causa di problemi di configurazione della rete relativi a quanto segue per SageMaker Studio o il cluster Amazon EMR:

  • Amazon Virtual Private Cloud (Amazon VPC)
  • Sottoreti
  • Gruppi di sicurezza

Assicurati che siano soddisfatti i seguenti prerequisiti per la connessione:

  • SageMaker Studio viene avviato in modalità solo VPC.
  • Il cluster Amazon EMR e il notebook SageMaker Studio vengono lanciati nello stesso VPC. Se si trovano in VPC diversi, vengono collegati tramite una connessione peering VPC. Se si utilizza il peering VPC per un caso d'uso interregionale, è necessario configurare manualmente il file di configurazione /etc/sparkmagic/config.json. Questo perché la funzionalità di rilevamento del cluster Amazon EMR non supporta attualmente la connessione tra regioni. Per maggiori informazioni, consulta Creazione di notebook Amazon SageMaker con Spark in Amazon EMR.
  • Il cluster Amazon EMR viene lanciato con le applicazioni Apache Spark e Apache Livy installate.

Per risolvere gli errori di timeout della connessione, procedi come segue:

1.    Esegui i controlli seguenti:

  • Assicurati che i gruppi di sicurezza o le liste di controllo degli accessi (ACL) alla rete siano configurati correttamente per consentire il traffico sulla porta 8998. Esegui questo controllo sia per il notebook SageMaker Studio che per il cluster Amazon EMR.
  • Assicurati che il gruppo di sicurezza per SageMaker Studio abbia una regola in entrata che consente il traffico NFS sulla porta 2049 tra il dominio e il volume Amazon Elastic File System (Amazon EFS).
  • Assicurati che il gruppo di sicurezza del nodo principale del cluster EMR disponga di una regola in ingresso per il TCP personalizzato sulla porta 8998. Questa regola può specificare il gruppo di sicurezza dello Studio o un CIDR che include la sottorete dello Studio.
    Nota: se utilizzi il peering VPC, consulta Aggiornamento dei gruppi di sicurezza perché facciano riferimento ai gruppi di sicurezza peer. Questa documentazione fornisce informazioni su come specificare un gruppo di sicurezza da un VPC multi-account. Se disponi di una connessione peering VPC tra le sottoreti Amazon EMR e Studio, le rispettive tabelle di instradamento devono indirizzare il traffico l'una verso l'altra. Se non indirizzano correttamente il traffico, viene visualizzato ConnectTimeoutError.

2.    Se configuri la tua sottorete privata in modalità solo VPC senza un gateway NAT, crea i seguenti endpoint dell'interfaccia AWS PrivateLink per EMR e Servizio di token di sicurezza AWS (AWS STS), rispettivamente:

  • com.amazonaws. .elasticmapreduce
  • com.amazonaws. .sts

Questi endpoint devono essere creati nel VPC utilizzato con il cluster EMR e SageMaker Studio.

AWS STS è un servizio globale. Pertanto, potresti ricevere ConnectTimeoutError quando provi a connetterti a un cluster Amazon EMR con più account da Studio in una regione diversa da us-east-1:

ConnectTimeoutError: Connect timeout on endpoint URL: "https://sts.amazonaws.com/"

Per risolvere questo errore, imposta la variabile di ambiente AWS_STS_REGIONAL_ENDPOINTS su regional all'interno del notebook Jupyter prima di eseguire il comando connect:

%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

Per ulteriori informazioni sugli endpoint regionali, consulta Gestione di AWS STS in una regione AWS e Endpoint regionalizzati AWS STS.

3.    Verifica se la connessione funziona aprendo il notebook Studio, selezionando il kernel Sparkmagic, quindi eseguendo il seguente comando nella cella:

Per le connessioni all'interno dello stesso account:

%local
!sm-sparkmagic connect --cluster-id <cluster-id>

Per le connessioni multi-account:

%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>

-oppure-

Esegui il seguente comando dal terminale del notebook sull'IP privato del nodo principale EMR:

curl <EMR-Master-Private-IP>:8998/sessions -v

Esegui i seguenti controlli per assicurarti che le configurazioni siano accurate:

SSH nel cluster EMR per recuperare il PID del servizio Livy:

ps -ef | grep livy

Controlla la porta su cui è in esecuzione il servizio Livy:

sudo netstat -anp | grep <PID>

Assicurati che il servizio sia in esecuzione sulla porta predefinita (8998) per Livy.