如何排查查看 AWS Glue ETL 任务的 Spark UI 时遇到的问题?

2 分钟阅读
0

为什么我看不到 AWS Glue ETL 任务的 Apache Spark UI?

解决方法

根据您是使用 AWS CloudFormation 堆栈还是使用 Docker 访问 Spark UI,选择下面的一种解决方法。

AWS CloudFormation 堆栈

当您使用 AWS CloudFormation 堆栈查看 Spark UI 时,Amazon Elastic Compute Cloud(Amazon EC2)实例将发出一条 HTTPS 请求,以确认 Spark UI 正常运行。如果该请求失败,则您会收到错误“WaitCondition timed out.Received 0 conditions when expecting 1”(等待条件超时,预期条件为 1,但收到的条件为 0),且 AWS CloudFormation 堆栈将会回滚。

检查以下各项以解决此问题:

  • 子网:确认子网可以连接 Amazon Simple Storage Service(Amazon S3)API 终端节点。例如,假设您使用私有子网,则确认该子网拥有一个 VPC 终端节点或 NAT 网关。
  • 历史服务器端口:确认您可以通过 Spark 历史服务器端口访问子网。例如,防火墙可以阻止该端口。
  • 事件日志目录:确认您已为事件日志目录输入了有效的 Amazon S3 路径。您必须将 s3a:// 用于事件日志路径方案。如果您指定的 Amazon S3 路径中有事件日志文件,则路径有效。

如果您仍然收到错误,则检查 Amazon CloudWatch Logs 中的以下日志组:

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

**注意:**历史服务器 EC2 实例将在 CloudFormation 堆栈回滚时终止。要防止实例被终止,请为堆栈启用终止保护

Docker

如果您使用 Docker 查看 Spark UI 且无法从 Web 浏览器连接到 Spark 历史服务器,则检查以下各项:

  • 确认 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"
  • 确认您为事件日志历史输入了有效的 Amazon S3 路径。您必须将 s3a:// 用于事件日志路径方案。如果您指定的 Amazon S3 路径中有事件日志文件,则路径有效。
  • 确认您在浏览器中输入了正确的端口号。默认情况下,端口号为 18080(例如,http://localhost:18080)。要更改端口号,请更改命令中的 -p 参数和 Dockerfile 中的 spark.history.ui.port 参数。

如果您仍然无法查看 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"

相关信息

使用 Apache Spark Web UI 监控任务

为 AWS Glue 任务启用 Apache Spark Web UI

AWS 官方
AWS 官方已更新 3 年前