Cuando uso una plantilla de AWS CloudFormation o Docker de forma local, no puedo ver la interfaz de usuario de Apache Spark para los trabajos de ETL de AWS Glue.
Resolución
En función de cómo accedas a la interfaz de usuario de Spark, sigue los siguientes pasos de resolución.
Pila de CloudFormation
Cuando usas una pila de CloudFormation para ver la interfaz de usuario de Spark, una instancia de Amazon Elastic Compute Cloud (Amazon EC2) realiza una solicitud HTTPS. Esta solicitud confirma si la interfaz de usuario de Spark funciona. Si la solicitud falla, aparece el siguiente error:
"WaitCondition timed out. Received 0 conditions when expecting 1,"
Cuando se produce este error, CloudFormation restaura la pila.
Para solucionar este problema, toma las siguientes medidas:
- Confirma que la subred pueda llegar al punto de enlace de la API de Amazon Simple Storage Service (Amazon S3). Por ejemplo, si usas una subred privada, confirma que la subred tiene un punto de enlace de nube virtual privada (VPC) o una puerta de enlace de NAT.
- Confirma que puedes acceder a la subred a través del puerto del servidor del historial de Spark. Por ejemplo, un firewall puede bloquear el puerto y provocar el error anterior.
- Confirma que has introducido una ruta de Amazon S3 válida para el directorio de registro de eventos. Debes usar s3a:// para el esquema de rutas de registros de eventos.
Nota: Si hay archivos de registro de eventos en la ruta de Amazon S3 especificada, entonces es válida.
Si el error persiste, compruebe los siguientes grupos de registro en Registros de Amazon CloudWatch para obtener más información:
- /aws-glue/sparkui_cfn/cfn-init.log
- /aws-glue/sparkui_cfn/spark_history_server.log
Nota: CloudFormation termina la instancia de EC2 del servidor histórico cuando se restaura la pila. Para no terminar la instancia, activa la protección de terminación de la pila.
Docker
Si utilizas Docker para ver la IU de Spark y no puedes conectarte al servidor del historial de Spark desde tu navegador, comprueba las siguientes configuraciones:
-
Confirma que las credenciales de AWS de clave de acceso y clave secreta son válidas. Si deseas utilizar credenciales temporales, debes usar spark.hadoop.fs.s3a.session.token en el comando. Ejemplo de 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: Sustituye AWS_ACCESS_KEY_ID por el ID de tu clave, AWS_SECRET_ACCESS_KEY por la clave de acceso secreta y SESSION_TOKEN por tu token de sesión.
-
Confirma que has introducido una ruta de Amazon S3 válida para el directorio de registro de eventos. Debes usar s3a:// para el esquema de rutas de registros de eventos.
Nota: Si hay archivos de registro de eventos en la ruta de Amazon S3 especificada, entonces es válida.
-
Confirma que has introducido el número de puerto correcto en el navegador. Para cambiar el número de puerto, cambia el parámetro -p en el comando docker run y el parámetro spark.history.ui.port en el archivo de Docker.
Nota: De forma predeterminada, el número de puerto es 18080. Puerto de ejemplo: http://localhost:18080.
Si sigues sin poder ver la interfaz de usuario de Spark, revisa tus registros para obtener más información. Para obtener los registros stdout y stderr para el contenedor de Docker, ejecuta docker run con el parámetro -it en vez del parámetro -itd. Ejemplo de 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: Sustituye AWS_ACCESS_KEY_ID por el ID de tu clave, AWS_SECRET_ACCESS_KEY por la clave de acceso secreta y SESSION_TOKEN por tu token de sesión.
Información relacionada
Supervisión de trabajos mediante la interfaz de usuario web de Apache Spark
Activación de la IU web de Apache Spark para trabajos de AWS Glue