Salta al contenuto

Perché non riesco a visualizzare l'interfaccia utente di Spark per i processi ETL di AWS Glue?

3 minuti di lettura
0

Quando utilizzo un modello AWS CloudFormation o Docker localmente, non riesco a vedere l'interfaccia utente di Apache Spark per i processi ETL di AWS Glue.

Risoluzione

Esegui i passaggi di risoluzione descritti di seguito in base alla modalità di accesso all'interfaccia utente di Spark.

Stack CloudFormation

Quando utilizzi uno stack CloudFormation per visualizzare l'interfaccia utente di Spark, un'istanza Amazon Elastic Compute Cloud (Amazon EC2) effettua una richiesta HTTPS. La richiesta verifica se l'interfaccia utente di Spark funziona. Se la richiesta ha esito negativo, ricevi il seguente errore:

"WaitCondition timed out. Received 0 conditions when expecting 1,"

Dopo l'errore, CloudFormation ripristina lo stack.

Per risolvere il problema, intraprendi le seguenti azioni:

  • Verifica che la sottorete possa raggiungere l'endpoint API di Amazon Simple Storage Service (Amazon S3). Ad esempio, se utilizzi una sottorete privata, verifica che la sottorete abbia un endpoint VPC (Virtual Private Cloud) o un gateway NAT.
  • Verifica di poter accedere alla sottorete tramite la porta del server della cronologia Spark. Ad esempio, un firewall potrebbe bloccare la porta e causare l'errore precedente.
  • Verifica di aver inserito un percorso Amazon S3 valido per la directory dei log degli eventi. Devi utilizzare s3a:// per lo schema del percorso dei log degli eventi.
    Nota: se nel percorso Amazon S3 specificato sono presenti file di log degli eventi, il percorso è valido.

Se il messaggio di errore persiste, verifica ulteriori dettagli nei seguenti gruppi di log in Amazon CloudWatch Logs:

  • /aws-glue/sparkui_cfn/cfn-init.log
  • /aws-glue/sparkui_cfn/spark_history_server.log

Nota: CloudFormation termina l'istanza EC2 del server di cronologia quando lo stack esegue il rollback. Per non terminare l'istanza, attiva la protezione da terminazione per lo stack.

Docker

Se utilizzi Docker per visualizzare l'interfaccia utente di Spark e non riesci a connetterti al server della cronologia Spark dal browser, controlla le seguenti configurazioni:

  • Verifica che le credenziali AWS della chiave di accesso e della chiave segreta siano valide. Per utilizzare credenziali temporanee, devi utilizzare spark.hadoop.fs.s3a.session.token nel comando. Esempio di comando:

    docker run -itd -e SPARK_HISTORY_OPTS="$SPARK_HISTORY_OPTS \
    -Dspark.history.fs.logDirectory=s3a://path_to_eventlog \
    -Dspark.hadoop.fs.s3a.access.key=AWS_ACCESS_KEY_ID
    -Dspark.hadoop.fs.s3a.secret.key=AWS_SECRET_ACCESS_KEY \
    -Dspark.hadoop.fs.s3a.session.token=SESSION_TOKEN \
    -Dspark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider" \
    -p 18080:18080 glue/sparkui:latest "/opt/spark/bin/spark-class org.apache.spark.deploy.history.HistoryServer"

    Nota: sostituisci AWS_ACCESS_KEY_ID con l'ID della tua chiave, AWS_SECRET_ACCESS_KEY con la tua chiave di accesso segreta e SESSION_TOKEN con il tuo token di sessione.

  • Verifica di aver inserito un percorso Amazon S3 valido per la directory dei log degli eventi. Devi utilizzare s3a:// per lo schema del percorso dei log degli eventi.
    Nota: se nel percorso Amazon S3 specificato sono presenti file di log degli eventi, il percorso è valido.

  • Verifica di aver inserito il numero di porta corretto nel browser. Per modificare il numero di porta, modifica il parametro**-p** nel comando docker run e il parametro spark.history.ui.port nel Dockerfile.
    Nota: per impostazione predefinita, il numero di porta è 18080. Esempio di porta: http://localhost:18080.

Se non riesci ancora a visualizzare l'interfaccia utente di Spark, consulta i log per ulteriori dettagli. Per ottenere i log stdout e stderr per il contenitore Docker, esegui docker run con il parametro -it anziché con il parametro -itd. Esempio di comando:

docker run -it -e SPARK_HISTORY_OPTS="$SPARK_HISTORY_OPTS \
-Dspark.history.fs.logDirectory=s3a://path_to_eventlog \
-Dspark.hadoop.fs.s3a.access.key=AWS_ACCESS_KEY_ID
-Dspark.hadoop.fs.s3a.secret.key=AWS_SECRET_ACCESS_KEY \
-Dspark.hadoop.fs.s3a.session.token=SESSION_TOKEN \
-Dspark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider" \
-p 18080:18080 glue/sparkui:latest "/opt/spark/bin/spark-class org.apache.spark.deploy.history.HistoryServer"

Nota: sostituisci AWS_ACCESS_KEY_ID con l'ID della tua chiave, AWS_SECRET_ACCESS_KEY con la tua chiave di accesso segreta e SESSION_TOKEN con il tuo token di sessione.

Informazioni correlate

Monitoraggio dei processi tramite l'interfaccia utente Web di Apache Spark

Abilitazione dell'interfaccia utente web di Apache Spark per i processi di AWS Glue

AWS UFFICIALEAggiornata 8 mesi fa