本文档提供了一些指导,可帮助您排查阻止 Managed Service for Apache Spark Spark 批量工作负载和互动式会话启动的常见问题。
概览
通常,当批量或会话无法启动时,系统会报告以下错误消息:
Driver compute node failed to initialize for batch in 600 seconds
此错误消息表示 Spark 驱动程序无法在 600 秒(10 分钟)的默认超时期限内启动。 常见原因与服务帐号权限、资源可用性、网络配置或 Spark 属性有关。
批量和会话启动失败原因及问题排查步骤
以下部分列出了批量和会话启动失败的常见原因,并提供了问题排查提示,以帮助您解决问题。
服务帐号权限不足
Managed Service for Apache Spark 批量或会话使用的服务帐号需要特定的 IAM 角色 ,这些角色包含 Managed Service for Apache Spark 操作和访问 资源 Google Cloud 的权限。如果服务帐号缺少必要的角色,则批量或会话的 Spark 驱动程序可能无法初始化。
- 必需的 Worker 角色:批量或会话服务帐号必须具有 Managed Service for Apache Spark Worker 角色 (
roles/dataproc.worker)。此角色包含 Managed Service 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 默认服务账号。
- 在 Google Cloud 控制台中,前往 IAM 和管理 > IAM 页面,找到批量或会话服务帐号, 然后验证该账号是否具有操作所需的必要角色。 授予任何缺失的角色。
配额不足
超出 Managed Service for Apache Spark 或其他 Google Cloud 资源的特定于项目或区域的配额可能会阻止启动新的批量或会话。
问题排查提示:
查看 Managed Service 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
- 针对 Managed Service for Apache Spark 批量或会话进行过滤:
- 在资源 下拉列表中,选择
Cloud Managed Service for Apache Spark Batch或Cloud Managed Service for Apache Spark Session。 - 按失败的批量或会话的
batch_id或session_id进行过滤。 您还可以按project_id和location(区域)进行过滤。
- 在资源 下拉列表中,选择
- 查找
jsonPayload.component="driver". 的日志条目。这些日志通常包含特定的错误消息或堆栈轨迹,这些信息可以在 600 秒超时之前指出驱动程序初始化失败的原因。