本文档介绍如何使用 Spark 界面监控和排查无服务器 Apache Spark 批处理工作负载的问题。
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
权限(通常是通过向该服务账号授予 DataprocWorker
角色来实现)。Spark 界面访问权限:
dataproc.batches.sparkApplicationRead
。必须向用户授予此权限,才能在Google Cloud 控制台中访问 Spark 界面。Dataproc Viewer
、Dataproc Editor
和Dataproc Administrator
角色拥有此权限。如需在 Google Cloud 控制台中打开 Spark 界面,您必须拥有以下角色之一,或者拥有包含此权限的自定义角色。
打开 Spark 界面
Spark 界面页面可在 Google Cloud 控制台批量工作负载中使用。
前往 Serverless for Apache Spark 交互式会话页面。
点击批次 ID 以打开批次详情页面。
点击顶部菜单中的 View Spark UI。
在以下情况下,“查看 Spark 界面”按钮处于停用状态:
- 如果未授予必需的权限
- 如果您在批处理详情页面上清除启用 Spark 界面复选框
- 如果您在提交批处理工作负载时将
spark.dataproc.appContext.enabled
属性设置为false
Persistent History Server
Apache Spark 无服务器会创建运行工作负载所需的计算资源,在这些资源上运行工作负载,然后在工作负载完成后删除这些资源。工作负载完成后,工作负载指标和事件不会保留。不过,您可以使用 Persistent History Server (PHS) 将工作负载应用历史记录(事件日志)保留在 Cloud Storage 中。
如需将 PHS 与批处理工作负载搭配使用,请执行以下操作:
Serverless for Apache Spark 日志
Serverless for Apache Spark 默认启用日志记录,并且工作负载日志会在工作负载完成后继续保留。Serverless for Apache Spark 会在 Cloud Logging 中收集工作负载日志。您可以在日志浏览器的 Cloud Dataproc Batch
资源下访问 Serverless for Apache Spark 日志。
查询 Serverless for Apache Spark 日志
Google Cloud 控制台中的 Logs Explorer 提供了一个查询窗格,可帮助您构建查询来检查批量工作负载日志。您可以按照以下步骤构建查询,以检查批处理工作负载日志:
- 系统已选择当前项目。您可以点击优化范围项目来选择其他项目。
定义批量日志查询。
使用过滤条件菜单过滤出批处理工作负载。
在所有资源下,选择 Cloud Dataproc 批处理作业资源。
在选择资源面板中,依次选择批次位置和批次 ID。这些批处理参数列在 Google Cloud 控制台的 Dataproc 批处理页面上。
点击应用。
在选择日志名称下,在搜索日志名称框中输入
dataproc.googleapis.com
,以限制要查询的日志类型。选择列出的一个或多个日志文件名。
使用查询编辑器过滤特定于虚拟机的日志。
指定资源类型和虚拟机资源名称,如以下示例所示:
注意: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 的示例:
- BATCH_UUID:批次 UUID 列在 Google Cloud 控制台的“批次详情”页面中,当您点击批次页面上的“批次 ID”时,系统会打开该页面。
点击运行查询。
Serverless for Apache Spark 日志类型和查询示例
以下列表介绍了不同的 Serverless for Apache Spark 日志类型,并为每种日志类型提供了 Logs Explorer 查询示例。
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"
dataproc.googleapis.com/spark
:此命名空间用于汇总在 Dataproc 集群主服务器虚拟机和工作虚拟机上运行的守护程序和执行器的 Spark 日志。spark
每个日志条目都包含一个master
、worker
或executor
组件标签,用于标识日志来源,如下所示:executor
:来自用户代码执行器的日志。这些通常是分布式日志。master
:来自 Spark 独立资源管理器主实例的日志,类似于 Compute Engine 上 Dataproc 的 YARNResourceManager
日志。worker
:来自 Spark 独立资源管理器工作器的日志,类似于 Dataproc on Compute Engine YARNNodeManager
日志。
针对
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"
dataproc.googleapis.com/startup
:startup
命名空间包含批处理(集群)启动日志。包含所有初始化脚本日志。组件通过标签进行标识,例如: 用于在指定虚拟机上查找启动日志的 Logs Explorer 查询示例: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"
dataproc.googleapis.com/agent
:agent
命名空间会汇总 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#"
dataproc.googleapis.com/autoscaler
:autoscaler
命名空间会汇总无服务器 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 审核日志
如需了解 Serverless for Apache Spark 审核日志,请参阅 Dataproc 审核日志记录。
工作负载指标
默认情况下,Serverless for Apache Spark 会启用可用的 Spark 指标的收集,除非您使用 Spark 指标收集属性来停用或替换一个或多个 Spark 指标的收集。
您可以在 Google Cloud 控制台的 Metrics Explorer 或批处理详情页面中查看工作负载指标。
批量指标
Dataproc batch
资源指标可提供有关批处理资源(例如批处理执行程序的数量)的深入分析。批次指标以 dataproc.googleapis.com/batch
为前缀。
Spark 指标
可用的 Spark 指标包括 Spark 驱动程序和执行器指标,以及系统指标。可用的 Spark 指标以 custom.googleapis.com/
为前缀。
设置指标提醒
您可以创建 Dataproc 指标提醒,以便及时收到工作负载问题的通知。
创建图表
您可以使用Google Cloud 控制台中的 Metrics Explorer 创建直观呈现工作负载指标的图表。例如,您可以创建一个显示 disk:bytes_used
的图表,然后按 batch_id
进行过滤。
Cloud Monitoring
监控功能使用工作负载元数据和指标来深入了解 Apache Spark 工作负载的无服务器运行状况和性能。 工作负载指标包括 Spark 指标、批处理指标和操作指标。
您可以使用 Google Cloud 控制台中的 Cloud Monitoring 来探索指标、添加图表、创建信息中心和创建提醒。
创建信息中心
您可以创建信息中心,以使用来自多个项目和不同 Google Cloud 产品的指标来监控工作负载。如需了解详情,请参阅创建和管理自定义信息中心。
Gemini Cloud Assist(预览版)
Gemini Cloud Assist 调查目前为预览版。适用于 Serverless for Apache Spark 批处理的“调查”功能可在以下区域中使用:
- asia-east1
- asia-southeast1
- europe-west1
- us-central1
此功能利用 Gemini 的高级功能,帮助您完成以下问题排查任务:
- 在 Google Cloud 控制台的批处理列表和批处理详情页面中,针对多个界面(包括聊天和日志)中失败和缓慢的无服务器 Spark 批处理作业创建问题排查调查。
- 在运行调查之前,先向问题添加自然语言背景信息说明。
- 运行调查以获取 Gemini 对问题根本原因和建议修复的分析洞见。
- 顺畅地创建支持请求。
如需了解详情,请参阅 Gemini Cloud Assist 调查。
使用预览版功能
如需注册 Gemini Cloud Assist 功能的预览版,请提交 Gemini Cloud Assist 可信测试员计划表单。Google Cloud 团队会与您联系,说明后续步骤。
高级问题排查(预览版)
本部分介绍了 Google Cloud 控制台中提供的高级问题排查功能(预览版)。这些功能包括 Gemini in BigQuery 产品中的 Gemini 辅助的 Serverless for Apache Spark 问题排查。
使用预览版功能
如需注册预览版高级问题排查功能,请提交 Gemini Cloud Assist 可信测试员计划表单。Google Cloud 团队会与您联系,说明后续步骤。
预览价格
参与非公开预览版不会产生额外费用。以下功能正式发布 (GA) 后,将开始收费。
正式版发布和正式版费用方面的预先通知将发送到您在预览版注册表单中提供的电子邮件地址。
功能要求
注册:您必须注册才能使用此功能。
权限:您必须拥有
dataproc.batches.analyze
权限。如果您拥有预定义的
roles/dataproc.admin
、roles/dataproc.editor
或roles/dataproc.viewer
角色,则表示您已拥有所需的权限。您无需执行任何其他操作。如果您使用自定义角色来访问 Dataproc 服务,则该自定义角色必须具有
dataproc.batches.analyze
权限。您可以使用 gcloud CLI 添加权限,如以下命令所示,该命令会在项目级层添加权限:
gcloud iam roles update CUSTOM_ROLE_ID --project=PROJECT_ID \ --add-permissions="dataproc.batches.analyze"
为 Serverless for Apache Spark 启用 Gemini 辅助问题排查功能:使用Google Cloud 控制台、gcloud CLI 或 Dataproc API 提交每个周期性 Spark 批量工作负载时,您可以为 Serverless for Apache Spark 启用 Gemini 辅助问题排查功能。在周期性批处理工作负载中启用此功能后,Dataproc 会将工作负载日志的副本存储 30 天,并使用保存的日志数据为工作负载提供 Gemini 辅助的问题排查功能。如需了解 Spark 工作负载日志内容,请参阅 Dataproc Serverless 日志。
控制台
请按照以下步骤在每个周期性 Spark 批处理工作负载上启用 Gemini 辅助问题排查功能:
在 Google Cloud 控制台中,前往 Dataproc 批次页面。
如需创建批处理工作负载,请点击创建。
在容器部分中,填写群组名称,用于将批次标识为一系列周期性工作负载之一。 Gemini 辅助分析功能会应用于使用此同类群组名称提交的第二个及后续工作负载。例如,将
TPCH-Query1
指定为运行每日 TPC-H 查询的已调度工作负载的同类群组名称。根据需要填写创建批次页面的其他部分,然后点击提交。如需了解详情,请参阅提交批处理工作负载。
gcloud
在终端窗口或 Cloud Shell 中以本地方式运行以下 gcloud CLI gcloud dataproc batches submit
命令,以针对每个周期性 Spark 批处理工作负载启用 Gemini 辅助问题排查功能:
gcloud dataproc batches submit COMMAND \ --region=REGION \ --cohort=COHORT \ other arguments ...
替换以下内容:
- COMMAND:Spark 工作负载类型,例如
Spark
、PySpark
、Spark-Sql
或Spark-R
。 - REGION:工作负载将运行的区域。
- COHORT:群组名称,用于将批次标识为一系列周期性工作负载之一。
Gemini 辅助分析功能会应用于使用此同类群组名称提交的第二个及后续工作负载。例如,将
TPCH Query 1
指定为运行每日 TPC-H 查询的计划工作负载的同类群组名称。
API
在 batches.create 请求中添加 RuntimeConfig.cohort
名称,以在每个周期性 Spark 批处理工作负载上启用 Gemini 辅助问题排查功能。Gemini 辅助分析功能会应用于以相应同类群组名称提交的第二个及后续工作负载。例如,将 TPCH-Query1
指定为运行每日 TPC-H 查询的已调度工作负载的同类群组名称。
示例:
...
runtimeConfig:
cohort: TPCH-Query1
...
适用于 Serverless for Apache Spark 的 Gemini 辅助问题排查功能
Google Cloud 控制台的批处理详情页面和批处理列表页面上提供以下 Gemini 辅助问题排查预览功能。
调查标签页:批次详情页面上的“调查”标签页提供了一个“健康状况概览”(预览版)部分,其中包含以下 Gemini 辅助问题排查面板:
- 现在是什么情况?以及我可以做些什么? 点击 Ask Gemini,请求获取建议以帮助修复失败的工作负载或改进成功但缓慢的工作负载。
如果您点击向 Gemini 提问,Gemini for Google Cloud 会根据工作负载日志、Spark 指标和 Spark 事件生成任何错误、异常或突出显示的摘要。 Gemini for Google Cloud 还可以显示建议的步骤列表,您可以按照这些步骤来修复失败的工作负载,或提升成功但运行缓慢的工作负载的性能。
Gemini 辅助问题排查列:在预览版中,Google Cloud 控制台中的 Dataproc 批处理列表页面包含
What is happening now?
和What can I do about it?
列。仅当已完成的批次处于
Failed
、Cancelled
或Succeeded
状态时,系统才会显示并启用向 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 写入时间较长的阶段。查找这些阶段中完成时间超过平均时间的异常任务。检查具有高 Shuffle 写入时间的执行器是否也显示出高磁盘 I/O 活动。更高效的序列化和额外的分区步骤可能会有所帮助。与记录读取相比,记录写入量过大可能表明由于连接效率低下或转换不正确而导致了意外的数据重复。 |
应用级指标 | |
阶段进程 | 此指标显示处于失败、等待和运行阶段的阶段数。大量失败或等待中的阶段可能表明存在数据倾斜。检查数据分区,并使用 Spark 界面中的阶段标签页调试阶段失败的原因。 |
批量 Spark 执行器 | 此指标显示可能需要的执行程序数量与正在运行的执行程序数量。所需执行程序与正在运行的执行程序之间存在较大差异,可能表示自动扩缩存在问题。 |
虚拟机级指标 | |
使用的内存 | 此指标显示了正在使用的虚拟机内存百分比。如果主百分比较高,则可能表示驱动程序内存不足。对于其他虚拟机节点,百分比较高可能表示执行程序内存不足,这可能会导致磁盘溢出量过高,并减慢工作负载运行时速度。使用 Spark 界面分析执行程序,以检查是否存在 GC 时间过长和任务失败次数过多的情况。此外,还可调试 Spark 代码,以实现大型数据集缓存和不必要的变量广播。 |
作业日志
在预览版中, Google Cloud 控制台中的批处理详情页面会列出作业(批处理工作负载)日志。日志包含从工作负载输出和 Spark 日志中过滤的警告和错误。您可以选择日志严重程度,添加过滤条件,然后点击在 Logs Explorer 中查看图标,以在 Logs Explorer 中打开所选的批处理日志。

示例:在 Google Cloud 控制台的批处理详情页面中选择 Errors
后,Logs Explorer 随即打开。