监控和排查 Dataproc Serverless 批量工作负载问题

本文档介绍了如何使用 Spark 界面监控和排查 Dataproc Serverless for Spark 批处理工作负载问题。

Spark 界面

Spark 界面会从 Dataproc Serverless 收集 Apache Spark 执行详情,以便针对 Spark 批处理工作负载进行分析。Spark 界面功能默认处于启用状态,可免费使用。

Spark 界面功能收集的数据会保留 90 天。您可以使用此网页界面监控和调试 Spark 工作负载,而无需创建 Persistent History Server

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

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

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

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

打开 Spark 界面

Google Cloud 控制台中提供了 Spark 界面页面,供您查看 Spark 批量工作负载。

  1. 前往 Dataproc Serverless Interactive 会话页面。

    转到 Dataproc 批次

  2. 点击一个批处理 ID 以打开批处理详情页面。

  3. 点击顶部菜单中的查看 Spark 界面

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

  • 如果未授予必需权限
  • 如果您在批处理详情页面上清除启用 Spark 界面复选框
  • 如果您在提交批处理工作负载时将 spark.dataproc.appContext.enabled 属性设置为 false

限制

Spark 界面不支持以下 Dataproc Serverless 工作负载:

Persistent History Server

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

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

  1. 创建 Dataproc Persistent History Server (PHS)

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

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

Dataproc Serverless for Spark 日志

Dataproc Serverless for Spark 中默认启用了日志记录,并且工作负载日志会在工作负载完成后保留。Dataproc Serverless for Spark 会在 Cloud Logging 中收集工作负载日志。您可以在日志浏览器的 Cloud Dataproc Batch 资源下访问 Dataproc Serverless for Spark 日志。

查询 Dataproc Serverless for Spark 日志

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

  1. 转到 Logs Explorer

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

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

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

        1. 选择资源面板中,依次选择批量 LOCATION(位置)和 BATCH ID(批量 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. 点击运行查询

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

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

  1. dataproc.googleapis.com/output:此日志文件包含批量工作负载输出。Dataproc Serverless for 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/sparkspark 命名空间会汇总在 Dataproc 集群主服务器虚拟机和工作器虚拟机上运行的守护程序和执行器的 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
    
    针对指定虚拟机上的启动日志的日志浏览器查询示例:
    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 命名空间会汇总 Dataproc Serverless for 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 日志

Dataproc Serverless 审核日志

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

工作负载指标

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

您可以在 Google Cloud 控制台的 Metrics Explorer批处理详情页面中查看工作负载指标。

批量指标

Dataproc batch 资源指标可深入了解批处理资源,例如批处理执行程序的数量。批量指标以 dataproc.googleapis.com/batch 为前缀。

Metrics Explorer 中的批量指标示例。

Spark 指标

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

Metrics Explorer 中的 Spark 指标示例。

设置指标提醒

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

创建图表

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

Cloud Monitoring

监控功能使用工作负载元数据和指标来深入了解 Dataproc Serverless for Spark 工作负载的运行状况和性能。工作负载指标包括 Spark 指标、批量指标和操作指标。

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

创建信息中心

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

高级问题排查(预览版)

本部分介绍 Google Cloud 控制台中提供的高级问题排查功能(预览版)。这些功能包括 Gemini 协助排查 Dataproc Serverless 问题,该功能属于 Gemini in BigQuery 产品。

使用预览版功能

如需注册使用高级问题排查功能的预览版,请填写并提交 Gemini in BigQuery 正式发布前注册表单。表单获得批准后,表单中列出的项目便可使用预览版功能。

预览价格

参与预览不会产生额外费用。以下预览版功能在正式发布 (GA) 后将开始收费:

我们会向您在预览版注册表单中提供的电子邮件地址发送 GA 扣款的预先通知。

功能要求

  • 注册:您必须注册此功能。

  • 权限:您必须拥有 dataproc.batches.analyze 权限。

    gcloud iam roles update CUSTOM_ROLE_ID --project=PROJECT_ID \
    --add-permissions="dataproc.batches.analyze"
    
  • 为 Dataproc Serverless 启用 Gemini 辅助问题排查:使用 Google Cloud 控制台、gcloud CLI 或 Dataproc API 提交每次周期性 Spark 批处理工作负载时,您可以为 Dataproc Serverless 启用 Gemini 辅助问题排查。在周期性批量工作负载上启用此功能后,Dataproc 会存储工作负载日志的副本 30 天,并使用已保存的日志数据为工作负载提供 Gemini 辅助的问题排查服务。如需了解 Spark 工作负载日志内容,请参阅 Dataproc Serverless for Spark 日志

控制台

若要在每个周期性 Spark 批处理工作负载上启用 Gemini 辅助问题排查功能,请执行以下步骤:

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

    转到 Dataproc 批次

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

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

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

gcloud

在终端窗口或 Cloud Shell 中本地运行以下 gcloud CLI gcloud dataproc batches submit 命令,以便为每个周期性 Spark 批处理工作负载启用 Gemini 辅助问题排查功能:

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 批处理工作负载启用 Gemini 辅助问题排查。系统会对使用此同类群组名称提交的第二个工作负载及后续工作负载应用 Gemini 辅助分析。例如,为每天运行 TPC-H 查询的定期工作负载指定 TPCH-Query1 作为同类群组名称。

示例:

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

使用 Gemini 为 Dataproc Serverless 排查问题

Google Cloud 控制台中的批处理详情批处理列表页面上提供了以下 Gemini 辅助问题排查预览功能。

  • 调查标签页:批量作业详情页面上的“调查”标签页提供了“健康状况概览(预览版)”部分,其中包含以下 Gemini 辅助问题排查面板:

    • 对哪些资源进行了自动调优?如果您在一个或多个工作负载上启用了自动调整,此面板会显示应用于正在运行、已完成和失败的工作负载的最新自动调整更改。

    “自动调整调查”面板。

    • 目前是什么情况?我该怎么办? 点击向 Gemini 提问,获取建议来帮助修复失败的工作负载或改进成功但运行缓慢的工作负载。

    “问一问 Gemini”按钮。

    如果您点击 Ask Gemini(询问 Gemini),Gemini for Google Cloud 会生成工作负载日志、Spark 指标和 Spark 事件中的所有错误、异常或亮点摘要。Gemini for Google Cloud 还会显示一系列建议步骤,以便您修复失败的工作负载或提升成功但运行缓慢的工作负载的性能。

    Gemini for Google Cloud 生成的分析洞见。

  • Gemini 协助的问题排查列:在预览版中,Google Cloud 控制台中的 Dataproc 批处理列表页面包含 What was AutotunedWhat is happening now?What can I do about it? 列。

    批处理会列出 Gemini 列。

    只有当已完成的批次处于 FailedCancelledSucceeded 状态时,系统才会显示并启用 Ask Gemini 按钮。如果您点击 Ask Gemini(询问 Gemini),Gemini for Google Cloud 会根据工作负载日志、Spark 指标和 Spark 事件生成任何错误、异常或亮点的摘要。Gemini for Google Cloud 还会显示一系列建议步骤,以便您修复失败的工作负载或提升成功但运行缓慢的工作负载的性能。

批量指标亮点

在预览版中,Google Cloud 控制台的批处理详情页面包含显示重要批处理工作负载指标值的图表。批量处理完成后,系统会在指标图表中填充值。

批量指标信息中心。

指标表格

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

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

作业日志

在预览版中,Google Cloud 控制台的批处理详情页面会列出作业(批处理工作负载)日志。日志包含从工作负载输出和 Spark 日志中过滤出的警告和错误。您可以选择日志严重性,添加过滤条件,然后点击在日志浏览器中查看图标,以在日志浏览器中打开所选的批量日志。

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

批量日志浏览器。