本文档提供了有关排查常见问题的指南,这些问题会阻止 Google Cloud Serverless for Apache Spark Spark 批量工作负载和交互式会话启动。
概览
通常,当批量作业或会话无法启动时,系统会报告以下错误消息:
Driver compute node failed to initialize for batch in 600 seconds
此错误消息表示 Spark 驱动程序 无法在 600 秒(10 分钟)的默认超时期限内启动。 常见原因与服务账号权限、资源可用性、 网络配置或 Spark 属性有关。
批量作业和会话启动失败原因及问题排查步骤
以下部分列出了批量作业和会话启动失败的常见原因,并提供了 问题排查提示,以帮助您解决这些问题。
服务账号权限不足
Serverless for Apache Spark 批量作业或会话使用的服务账号需要特定的 IAM 角色 ,这些角色包含 Serverless for Apache Spark 操作和访问 资源 Google Cloud 的权限。如果服务账号缺少必要的角色, 则批量作业或会话的 Spark 驱动程序可能无法初始化。
- 必需的 Worker 角色:批量作业或会话服务账号必须具有
Dataproc Worker 角色 (
roles/dataproc.worker)。此角色包含 Serverless for Apache Spark 预配和 管理计算资源所需的最低权限。 - 数据访问权限:如果您的 Spark 应用从 Cloud Storage 或 BigQuery 读取数据或向其中写入数据,则服务账号需要与这些服务相关的角色:
- Cloud Storage:读取需要
Storage Object Viewer角色 (roles/storage.objectViewer) ,写入需要Storage Object Creator角色 (roles/storage.objectCreator) 或Storage Object Admin角色 (roles/storage.admin)。 - BigQuery:读取需要
BigQuery Data Viewer角色 (roles/bigquery.dataViewer) ,写入需要BigQuery Data Editor角色 (roles/bigquery.dataEditor) 。
- Cloud Storage:读取需要
- 日志记录权限:服务账号需要具有
将日志写入 Cloud Logging 的权限的角色。通常,
Logging Writer角色 (roles/logging.logWriter) 就足够了。
问题排查提示:
- 确定批量作业或会话 服务账号。 如果未指定,则默认为 Compute Engine 默认服务账号。
- 在控制台中,前往 IAM 和管理 > IAM 页面,找到批量作业或会话服务账号, 然后验证该账号是否具有操作所需的必要角色。 Google Cloud 授予任何缺失的角色。
配额不足
超出 Google Cloud Serverless for Apache Spark 或其他 Google Cloud 资源的特定于项目或区域的配额可能会阻止启动新的批量作业或会话。
问题排查提示:
查看 Google Cloud Serverless for Apache Spark 配额页面 ,了解对并发批量作业、DCU 和 shuffle 存储的限制。
- 您还可以使用
gcloud compute quotas list命令查看 项目和区域的当前用量和限制:gcloud compute quotas list --project=PROJECT_ID --filter="service:dataproc.googleapis.com"
- 您还可以使用
如果您反复达到配额限制,请考虑通过 控制台申请增加配额。 Google Cloud
网络配置问题
不正确的网络设置(例如 VPC 配置、专用 Google 访问通道、 或防火墙规则)可能会阻止 Spark 驱动程序初始化或连接到 必要服务。
问题排查提示:
验证为批量作业或会话指定的 VPC 网络和子网是否已 正确配置,并且具有足够的可用 IP 地址。
如果批量作业或会话需要访问 Google API 和服务,而无需遍历公共互联网,请验证 是否为子网启用了专用 Google 访问通道。
查看 VPC 防火墙规则,验证它们是否不会 无意中阻止内部通信或出站流量流向 Spark 应用所需的 Google API 或 外部服务。
Spark 属性无效或应用代码问题
配置错误的 Spark 属性(尤其是与驱动程序资源相关的属性) 或 Spark 应用代码中的问题可能会导致启动失败。
问题排查提示:
检查
spark.driver.memory和spark.driver.cores值。 验证它们是否在合理的限制范围内,并且与可用的 DCU 一致。 这些属性的值过大可能会导致资源 耗尽和初始化失败。移除所有不必要或 实验性的 Spark 属性,以简化调试。尝试运行“Hello World”Spark 应用,以确定问题 是出在环境设置上,还是由于代码复杂性或错误所致。
验证为批量作业或会话指定的所有应用 JAR、Python 文件、 或依赖项是否正确 位于 Cloud Storage 中,并且 批量作业或会话服务账号是否可以访问这些文件。
检查日志
诊断批量作业创建失败问题的一个关键步骤是检查 Cloud Logging 中的详细日志。
- 在控制台中,前往 **Cloud Logging** 页面 。 Google Cloud
- 按 Serverless for Apache Spark 批量作业或会话进行过滤:
- 在资源 下拉列表中,选择
Cloud Dataproc Batch或Cloud Dataproc Session。 - 按失败的批量作业或会话的
batch_id或session_id进行过滤。 您还可以按project_id和location(区域)进行过滤。
- 在资源 下拉列表中,选择
- 查找包含
jsonPayload.component="driver". 的日志条目。这些日志通常包含特定的错误消息或堆栈轨迹,这些信息可以 在 600 秒超时之前指出驱动程序初始化失败的原因 。