跳至内容

为什么我无法查看 AWS Glue ETL 作业的 Spark UI?

2 分钟阅读
0

当我在本地使用 AWS CloudFormation 模板或 Docker 时,我无法查看 AWS Glue ETL 作业的 Apache Spark UI。

解决方法

根据您访问 Spark UI 的方式,采取以下解决步骤。

CloudFormation 堆栈

当您使用 CloudFormation 堆栈查看 Spark UI 时,Amazon Elastic Compute Cloud (Amazon EC2) 实例会发出一个 HTTPS 请求。此请求用于确认 Spark UI 是否正常运行。如果请求失败,您将会收到以下错误:

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

发生此错误后,CloudFormation 会回滚堆栈。

要解决此问题,请执行以下操作:

  • 确认子网可以访问 Amazon Simple Storage Service (Amazon S3) API 端点。例如,如果您使用私有子网,请确认该子网具有虚拟私有云 (VPC) 端点或 NAT 网关。
  • 确认您可以通过 Spark History Server 端口访问子网。例如,防火墙可能会阻止该端口,从而导致上述错误。
  • 确认您为事件日志目录输入了有效的 Amazon S3 路径。必须使用 s3a:// 作为事件日志路径方案。
    **注意:**如果您指定的 Amazon S3 路径中存在事件日志文件,则表明该路径有效。

如果您仍然收到错误,请查看 Amazon CloudWatch Logs 中的以下日志组以获取更多详细信息:

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

**注意:**当堆栈回滚时,CloudFormation 会终止 History Server EC2 实例。要想不终止该实例,请为堆栈启用终止保护

Docker

如果您使用 Docker 查看 Spark UI,但无法从浏览器连接到 Spark History Server,请检查以下配置:

  • 确认访问密钥和私有密钥 AWS 凭证有效。要使用临时凭证,您必须在命令中使用 spark.hadoop.fs.s3a.session.token。命令示例:

    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"

    **注意:**请将 AWS_ACCESS_KEY_ID 替换为您的密钥 ID,将 AWS_SECRET_ACCESS_KEY 替换为您的秘密访问密钥,将 SESSION_TOKEN 替换为您的会话令牌。

  • 确认您为事件日志目录输入了有效的 Amazon S3 路径。必须使用 s3a:// 作为事件日志路径方案。
    **注意:**如果您指定的 Amazon S3 路径中存在事件日志文件,则表明该路径有效。

  • 确认您在浏览器中输入了正确的端口号。要更改端口号,请更改 docker run 命令中的 -p 参数和 Dockerfile 中的 spark.history.ui.port 参数。
    **注意:**默认情况下,端口号为 18080。示例端口:http://localhost:18080

如果您仍然无法查看 Spark UI,请查看您的日志以获取更多详细信息。要获取 Docker 容器的 stdout 和 stderr 日志,请使用 -it 参数而非 -itd 参数运行 docker run。命令示例:

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"

**注意:**请将 AWS_ACCESS_KEY_ID 替换为您的密钥 ID,将 AWS_SECRET_ACCESS_KEY 替换为您的秘密访问密钥,将 SESSION_TOKEN 替换为您的会话令牌。

相关信息

使用 Apache Spark Web UI 监控作业

为 AWS Glue 作业启用 Apache Spark Web UI

AWS 官方已更新 6 个月前