监控和排查批处理工作负载问题

本文档介绍了可用于监控和排查无服务器 Apache Spark 批处理工作负载的工具和文件。

通过 Google Cloud 控制台排查工作负载问题

当批量作业失败或性能不佳时,建议您先在 Google Cloud 控制台的批处理页面中打开该作业的批处理详情页面。

使用“摘要”标签页:问题排查中心

批次详情页面打开时,系统会默认选择摘要标签页,其中会显示关键指标和过滤后的日志,帮助您快速初步评估批次健康状况。完成此初步评估后,您可以使用批处理详情页面上列出的更专业的工具(例如 Spark 界面日志浏览器Gemini Cloud Assist)执行更深入的分析。

批量指标重要信息

批次详情页面上的摘要标签页包含显示重要批次工作负载指标值的图表。指标图表会在完成后填充,并直观地显示潜在问题,例如资源争用、数据倾斜或内存压力。

批处理指标信息中心。

指标表格

下表列出了 Google Cloud 控制台的批处理详情页面上显示的 Spark 工作负载指标,并说明了指标值如何提供有关工作负载状态和性能的分析洞见。

指标 显示内容
执行器级指标
JVM GC 时间与运行时的比率 此指标显示每个执行器的 JVM GC(垃圾收集)时间与运行时的比率。较高的比率可能表明在特定执行器上运行的任务中存在内存泄漏或数据结构效率低下,这可能会导致对象频繁更换。
溢出到磁盘的字节数 此指标显示了不同执行器之间溢出的磁盘字节总数。如果执行器显示磁盘溢出字节数较高,则可能表示存在数据倾斜。如果该指标随时间推移而增加,则可能表明存在内存压力或内存泄漏的阶段。
读取和写入的字节数 此指标显示了每个执行器的写入字节数与读取字节数。读取或写入的字节数存在巨大差异可能表明,复制联接会导致特定执行程序上的数据放大。
读取和写入的记录 此指标显示每个执行器读取和写入的记录数。如果读取的记录数量较多,而写入的记录数量较少,则可能表明特定执行器的处理逻辑存在瓶颈,导致记录在等待时被读取。如果执行器在读取和写入方面始终滞后,则可能表明这些节点上存在资源争用,或者执行器特定的代码效率低下。
Shuffle 写入时间与运行时间的比率 该指标显示了执行器在 Shuffle 运行时所花费的时间与总运行时的比较。如果某些执行器的此值较高,则可能表示存在数据倾斜或数据序列化效率低下。 您可以在 Spark 界面中识别 shuffle 写入时间较长的阶段。查找这些阶段中完成时间超过平均时间的异常任务。检查具有高 Shuffle 写入时间的执行器是否也显示出高磁盘 I/O 活动。更高效的序列化和额外的分区步骤可能会有所帮助。与记录读取相比,记录写入量过大可能表明由于连接效率低下或转换不正确而导致了意外的数据重复。
应用级指标
阶段进程 此指标显示处于失败、等待和运行阶段的阶段数。大量失败或等待中的阶段可能表明存在数据倾斜。检查数据分区,并使用 Spark 界面中的阶段标签页调试阶段失败的原因。
Batch Spark 执行程序 此指标显示了可能需要的执行程序数量与正在运行的执行程序数量。所需执行程序与正在运行的执行程序之间的差异过大可能表示自动扩缩存在问题。
虚拟机级指标
使用的内存 此指标显示了正在使用的虚拟机内存的百分比。如果主百分比较高,则可能表示驱动程序内存不足。对于其他虚拟机节点,百分比较高可能表示执行程序内存不足,这可能会导致磁盘溢出量过高,并减慢工作负载运行时速度。使用 Spark 界面分析执行程序,以检查是否存在 GC 时间过长和任务失败次数过多的情况。此外,还可调试 Spark 代码,以实现大型数据集缓存和不必要的变量广播。

作业日志

批次详情页面包含作业日志部分,其中列出了从作业(批量工作负载)日志中过滤出的警告和错误。借助此功能,您可以快速识别严重问题,而无需手动解析大量日志文件。您可以从下拉菜单中选择日志严重程度(例如 Error),并添加文字过滤条件来缩小结果范围。如需进行更深入的分析,请点击在日志浏览器中查看图标,以在日志浏览器中打开所选的批处理日志。

在 Cloud Logging 中查看批处理日志
在 Cloud Logging 中查看批处理日志

示例:在 Google Cloud 控制台的批处理详情页面上,从“严重程度”选择器中选择 Errors 后,Logs Explorer 随即打开。

批处理日志浏览器。

Spark 界面

Spark 界面会从 Serverless for Apache Spark 批处理工作负载中收集 Apache Spark 执行详情。Spark 界面功能默认处于启用状态,可免费使用。

Spark 界面功能收集的数据会保留 90 天。您可以使用此网页界面监控和调试 Spark 工作负载,而无需创建永久性历史记录服务器

所需的 Identity and Access Management 权限和角色

如需将 Spark 界面功能与批处理工作负载搭配使用,需要以下权限。

  • 数据收集权限:dataproc.batches.sparkApplicationWrite。必须向运行批处理工作负载的服务账号授予此权限。此权限包含在 Dataproc Worker 角色中,该角色会自动授予给 Serverless for Apache Spark 默认使用的 Compute Engine 默认服务账号(请参阅 Serverless for Apache Spark 服务账号)。不过,如果您为批处理工作负载指定了自定义服务账号,则必须向该服务账号添加 dataproc.batches.sparkApplicationWrite 权限(通常是通过向该服务账号授予 Dataproc Worker 角色来实现)。

  • Spark 界面访问权限:dataproc.batches.sparkApplicationRead。必须向用户授予此权限,才能在Google Cloud 控制台中访问 Spark 界面。Dataproc ViewerDataproc EditorDataproc Administrator 角色拥有此权限。如需在 Google Cloud 控制台中打开 Spark 界面,您必须拥有以下角色之一,或者拥有包含此权限的自定义角色。

打开 Spark 界面

Spark 界面页面可在 Google Cloud 控制台批量工作负载中使用。

  1. 前往 Serverless for Apache Spark 交互式会话页面。

    转到 Dataproc 批次

  2. 点击批次 ID 以打开批次详情页面。

  3. 点击顶部菜单中的 View Spark UI

在以下情况下,“查看 Spark 界面”按钮处于停用状态:

借助 Gemini Cloud Assist(预览版)进行 AI 赋能的调查

概览

Gemini Cloud Assist Investigations 预览版功能使用 Gemini 的高级功能来协助创建和运行 Serverless for Apache Spark 批量工作负载。此功能会分析失败和运行缓慢的工作负载,以找出根本原因并推荐修复措施。它会创建持久性分析,您可以查看、保存并与 Google Cloud 支持团队分享,以便于协作并加快问题解决速度。

特性

您可以使用此功能通过 Google Cloud 控制台创建调查:

  • 在创建调查之前,先为问题添加自然语言上下文说明。
  • 分析失败和缓慢的批处理工作负载。
  • 获取有关问题根本原因的分析洞见以及建议的修复方案。
  • 创建 Google Cloud 支持请求,并附上完整的调查背景信息。

准备工作

如需开始使用“调查”功能,请在您的 Google Cloud 项目中启用 Gemini Cloud Assist API

开始调查

如需开始调查,请执行以下任一操作:

  1. 方法 1:在 Google Cloud 控制台中,前往批次列表页面。 对于状态为 Failed 的任何批次,Gemini 数据分析列中都会显示调查按钮。点击相应按钮即可开始调查。

    显示“调查”按钮的“批次”列表页面。
  2. 方法 2:打开批处理工作负载的批处理详情页面进行调查。对于 SucceededFailed 批处理工作负载,在摘要标签页的健康状况概览部分,Gemini 提供的分析洞见面板中会显示调查按钮。 点击相应按钮即可开始调查。

    批量详情页面,其中显示了失败作业的“Gemini 提供的分析洞见”列中的“调查”按钮。

    调查按钮文本表示调查状态:

    • 调查:尚未针对此 batch_details 运行调查。 点击相应按钮即可开始调查。
    • 查看调查:调查已完成。点击相应按钮即可查看结果。
    • 正在调查:正在进行调查。

解读调查结果

调查结束后,系统会打开调查详情页面。 本页包含完整的 Gemini 分析,分为以下几个部分:

  • 问题:一个折叠部分,其中包含正在调查的批处理工作负载的自动填充详情。
  • 相关观测结果:一个折叠部分,其中列出了 Gemini 在分析日志和指标期间发现的关键数据点和异常情况。
  • 假设:这是主要部分,默认处于展开状态。 它会显示所观测问题的潜在根本原因列表。每个假设都包含:
    • 概览:对可能原因的说明,例如“Shuffle 写入时间过长,可能存在任务倾斜”。
    • 推荐的修复措施:可用于解决潜在问题的切实可行的步骤列表。

采取措施

查看假设和建议后:

  • 将建议的一个或多个修复措施应用到作业配置或代码,然后重新运行作业。

  • 如需针对调查的实用性提供反馈,请点击面板顶部的“我喜欢”或“不喜欢”图标。

查看和上报调查

如需查看之前运行的调查的结果,请点击 Cloud Assist 调查页面上的调查名称,以打开调查详情页面。

如果您需要进一步的帮助,可以提交 Google Cloud 支持请求。此流程可为支持工程师提供之前执行的调查的完整背景信息,包括 Gemini 生成的观测结果和假设。这种上下文共享可显著减少与支持团队之间所需的来回沟通,从而更快地解决支持请求。

如需基于调查创建支持请求,请执行以下操作:

调查详情页面中,点击申请支持

预览状态和价格

在公开预览版期间,使用 Gemini Cloud Assist 进行调查无需付费。此功能正式发布 (GA) 后,将开始收费。

如需详细了解正式版发布后的价格,请参阅 Gemini Cloud Assist 价格

“问问 Gemini”预览版(将于 2025 年 9 月 22 日停用)

向 Gemini 提问预览版功能通过 Google Cloud 控制台中的向 Gemini 提问按钮,让用户只需点击一下即可在批处理批处理详情页面上获取数据分析。此功能根据工作负载日志和指标生成了错误、异常和潜在性能改进的摘要。

在“问问 Gemini”预览版于 2025 年 9 月 22 日停用后,用户可以继续使用 Gemini Cloud Assist 调查功能获取 AI 赋能的帮助。

重要提示:为确保获得不间断的 AI 故障排查帮助,强烈建议您在 2025 年 9 月 22 日之前启用 Gemini Cloud Assist 调查

Serverless for Apache Spark 日志

默认情况下,Serverless for Apache Spark 会启用日志记录,并且工作负载日志会在工作负载完成后继续保留。Serverless for Apache Spark 会在 Cloud Logging 中收集工作负载日志。您可以在 Logs Explorer 中 Cloud Dataproc Batch 资源下访问 Serverless for Apache Spark 日志。

查询 Serverless for Apache Spark 日志

Google Cloud 控制台中的 Logs Explorer 提供了一个查询窗格,可帮助您构建查询来检查批量工作负载日志。您可以按照以下步骤构建查询,以检查批处理工作负载日志:

  1. 转到 Logs Explorer

  2. 系统已选择当前项目。您可以点击优化范围项目来选择其他项目。
  3. 定义批量日志查询。

    • 使用过滤条件菜单过滤出批处理工作负载。

      1. 所有资源下,选择 Cloud Dataproc 批处理作业资源。

        1. 选择资源面板中,依次选择批次位置批次 ID。这些批处理参数列在 Google Cloud 控制台中的 Dataproc 批处理页面上。

        2. 点击应用

        3. 选择日志名称下,在搜索日志名称框中输入 dataproc.googleapis.com,以限制要查询的日志类型。选择一个或多个列出的日志文件名。

    • 使用查询编辑器过滤特定于虚拟机的日志。

      1. 指定资源类型和虚拟机资源名称,如以下示例所示:

        resource.type="cloud_dataproc_batch"
        labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCH_UUID-VM_SUFFIX"
        
        注意:

        • BATCH_UUID:批处理 UUID 列在 Google Cloud 控制台的“批处理详情”页面中,当您点击批处理页面上的“批处理 ID”时,该页面会打开。

        批量日志还会在虚拟机资源名称中列出批次的 UUID。以下是来自批处理 driver.log 的示例:

  4. 点击运行查询

Serverless for Apache Spark 日志类型和查询示例

以下列表介绍了不同的 Serverless for Apache Spark 日志类型,并为每种日志类型提供了 Logs Explorer 查询示例。

  1. dataproc.googleapis.com/output:此日志文件包含批处理工作负载输出。 Serverless for Apache Spark 会将批处理输出流式传输到 output 命名空间,并将文件名设置为 JOB_ID.driver.log

    输出日志的 Logs Explorer 查询示例:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Foutput"
    

  2. dataproc.googleapis.com/spark:此命名空间用于汇总在 Dataproc 集群主服务器虚拟机和工作虚拟机上运行的守护程序和执行器的 Spark 日志。spark每个日志条目都包含一个 masterworkerexecutor 组件标签,用于标识日志来源,如下所示:

    • executor:来自用户代码执行器的日志。这些通常是分布式日志。
    • master:来自 Spark 独立资源管理器主实例的日志,类似于 Dataproc on Compute Engine YARN ResourceManager 日志。
    • worker:Spark 独立资源管理器工作器的日志,类似于 Dataproc on Compute Engine YARN NodeManager 日志。

    针对 spark 命名空间中所有日志的 Logs Explorer 查询示例:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fspark"
    

    以下是 spark 命名空间中 Spark 独立组件日志的 Logs Explorer 查询示例:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fspark"
    jsonPayload.component="COMPONENT"
    

  3. dataproc.googleapis.com/startupstartup 命名空间包含批处理(集群)启动日志。包含所有初始化脚本日志。组件通过标签进行标识,例如:

    startup-script[855]: ... activate-component-spark[3050]: ... enable spark-worker
    
    用于在指定虚拟机上查找启动日志的 Logs Explorer 查询示例:
    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fstartup"
    labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCH_UUID-VM_SUFFIX"
    
  4. dataproc.googleapis.com/agentagent 命名空间会汇总 Dataproc 代理日志。每个日志条目都包含用于标识日志来源的文件名标签。

    由指定工作器虚拟机生成的代理日志的 Logs Explorer 查询示例:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fagent"
    labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCHUUID-wWORKER#"
    

  5. dataproc.googleapis.com/autoscalerautoscaler 命名空间会汇总 Serverless for Apache Spark 自动扩缩器日志。

    由指定工作器虚拟机生成的代理日志的 Logs Explorer 查询示例:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fautoscaler"
    labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCHUUID-wWORKER#"
    

如需了解详情,请参阅 Dataproc 日志

如需了解 Serverless for Apache Spark 审核日志,请参阅 Dataproc 审核日志记录

工作负载指标

Serverless for Apache Spark 提供批量指标和 Spark 指标,您可以在 Google Cloud 控制台中的 Metrics Explorer批量详情页面中查看这些指标。

批量指标

Dataproc batch 资源指标可提供有关批处理资源(例如批处理执行程序的数量)的深入分析。批次指标以 dataproc.googleapis.com/batch 为前缀。

Metrics Explorer 中的批次指标示例。

Spark 指标

默认情况下,Serverless for Apache Spark 会启用可用的 Spark 指标的收集,除非您使用 Spark 指标收集属性来停用或替换一个或多个 Spark 指标的收集。

可用的 Spark 指标包括 Spark 驱动程序和执行器指标,以及系统指标。可用的 Spark 指标以 custom.googleapis.com/ 为前缀。

Metrics Explorer 中的 Spark 指标示例。

设置指标提醒

您可以创建 Dataproc 指标提醒,以便收到有关工作负载问题的通知。

创建图表

您可以使用Google Cloud 控制台中的 Metrics Explorer 创建直观呈现工作负载指标的图表。例如,您可以创建一个显示 disk:bytes_used 的图表,然后按 batch_id 进行过滤。

Cloud Monitoring

监控功能使用工作负载元数据和指标来深入了解 Apache Spark 工作负载的无服务器运行状况和性能。 工作负载指标包括 Spark 指标、批处理指标和操作指标。

您可以使用 Google Cloud 控制台中的 Cloud Monitoring 来探索指标、添加图表、创建信息中心和创建提醒。

创建信息中心

您可以创建信息中心,以使用来自多个项目和不同 Google Cloud 产品的指标来监控工作负载。如需了解详情,请参阅创建和管理自定义信息中心

Persistent History Server

Apache Spark 无服务器会创建运行工作负载所需的计算资源,在这些资源上运行工作负载,然后在工作负载完成后删除这些资源。工作负载完成后,工作负载指标和事件不会保留。不过,您可以使用 Persistent History Server (PHS) 将工作负载应用历史记录(事件日志)保留在 Cloud Storage 中。

如需将 PHS 与批处理工作负载搭配使用,请执行以下操作:

  1. 创建 Dataproc Persistent History Server (PHS)

  2. 提交工作负载时指定 PHS。

  3. 使用组件网关连接到 PHS,以查看应用详情、调度器阶段、任务级详情以及环境和执行器信息。

自动调节

  • 为 Serverless for Apache Spark 启用自动调优功能:您可以使用 Google Cloud 控制台、gcloud CLI 或 Dataproc API 提交每个周期性 Spark 批量工作负载时,为 Serverless for Apache Spark 启用自动调优功能。

控制台

请执行以下步骤,为每个周期性 Spark 批处理工作负载启用自动调优:

  1. 在 Google Cloud 控制台中,前往 Dataproc 批次页面。

    转到 Dataproc 批次

  2. 如需创建批处理工作负载,请点击创建

  3. 容器部分中,填写群组名称,用于将批次标识为一系列周期性工作负载之一。 Gemini 辅助分析功能会应用于使用此群组名称提交的第二个及后续工作负载。例如,将 TPCH-Query1 指定为运行每日 TPC-H 查询的已调度工作负载的同类群组名称。

  4. 根据需要填写创建批次页面的其他部分,然后点击提交。如需了解详情,请参阅提交批处理工作负载

gcloud

在终端窗口或 Cloud Shell 中以本地方式运行以下 gcloud CLI gcloud dataproc batches submit 命令,以针对每个周期性 Spark 批处理工作负载启用自动调优:

gcloud dataproc batches submit COMMAND \
    --region=REGION \
    --cohort=COHORT \
    other arguments ...

替换以下内容:

  • COMMAND:Spark 工作负载类型,例如 SparkPySparkSpark-SqlSpark-R
  • REGION:工作负载将运行的区域
  • COHORT:群组名称,用于将批次标识为一系列周期性工作负载之一。 Gemini 辅助分析会应用于使用此群组名称提交的第二个及后续工作负载。例如,将每天运行 TPC-H 查询的已安排工作负载的群组名称指定为 TPCH Query 1

API

batches.create 请求中添加 RuntimeConfig.cohort 名称,以针对每个周期性 Spark 批处理工作负载启用自动调节。自动调优会应用于使用此群组名称提交的第二个及后续工作负载。例如,将 TPCH-Query1 指定为运行每日 TPC-H 查询的已安排工作负载的群组名称。

示例:

...
runtimeConfig:
  cohort: TPCH-Query1
...