排查批次和会话创建失败问题

本文档提供了有关排查导致 Managed Service for Apache 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 Logging 所需权限的角色。通常,Logging Writer 角色 (roles/logging.logWriter) 就足够了。

问题排查提示:

配额不足

如果超出 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 中的详细日志。

  1. 前往 Google Cloud 控制台中的 Cloud Logging 页面。
  2. 过滤 Managed Service for Apache Spark 批处理或会话:
    1. 在资源下拉菜单中,选择 Cloud Managed Service for Apache Spark Batch 或 Cloud Managed Service for Apache Spark Session。
    2. 按 batch_id 或 session_id 过滤失败的批处理或会话。 您还可以按 project_id 和 location(区域)过滤。
  3. 查找包含 jsonPayload.component="driver" 的日志条目。 这些日志通常包含特定的出错提示或堆栈轨迹,可以查明在 600 秒超时之前驱动程序初始化失败的原因。