排查作业延迟问题

本页面列出了导致 Dataproc 作业调度延迟的常见原因,其中提供的信息可帮助您避免此类延迟。

概览

以下是 Dataproc 作业延迟(受限)的常见原因:

  • 正在运行的作业过多
  • 系统内存用量高
  • 可用内存不足
  • 超出速率限制

通常,作业延迟消息将按以下格式发出:

Awaiting execution [SCHEDULER_MESSAGE]"

以下部分提供了特定作业延迟场景的可能原因和解决方案。

正在运行的作业过多

调度器消息:

Throttling job ### (and maybe others): Too many running jobs (current=xx max=xx)

原因:

已超出基于主虚拟机内存的并发作业数量上限(作业驱动程序在 Dataproc 集群主服务器虚拟机上运行)。 默认情况下,Dataproc 为应用预留 3.5GB 内存,每 GB 允许 1 个作业。

示例:n1-standard-4 机器类型具有 15GB 内存。如果预留了 3.5GB 作为开销,则 11.5GB 会保留下来。11GB 向下舍入为整数,最多可供 11 个并发作业使用。

解决方案:

  1. 监控 CPU 使用率和内存等日志指标以估算作业要求。

  2. 创建作业集群时:

    1. 为集群主服务器虚拟机使用内存更大的机器类型。

    2. 如果每个作业的 1GB 超出您需要的值,请将 dataproc:dataproc.scheduler.driver-size-mb 集群属性设置为小于 1024

    3. 请将 dataproc:dataproc.scheduler.max-concurrent-jobs 集群属性设置为适合您的作业要求的值。

系统内存较高或可用内存不足

调度器消息:

Throttling job xxx_____JOBID_____xxx (and maybe others): High system memory usage (current=xx%)

Throttling job xxx_____JOBID_____xxx (and maybe others): Not enough free memory (current=xx min=xx)

原因:

默认情况下,当内存用量达到 90% (0.9)) 时,Dataproc 代理会限制提交的作业。达到此上限后,您将无法安排新作业。

在集群上安排其他作业所需的可用内存量不足。

解决方案:

  1. 创建集群时:

    1. 增加 dataproc:dataproc.scheduler.max-memory-used 集群属性的值。例如,在 0.90 默认值上方将其设置为 0.95
    2. 增加 dataproc.scheduler.min-free-memory.mb 集群属性的值。默认值为 256 MB。

已超出作业速率限制

调度器消息:

Throttling job xxx__JOBID___xxx (and maybe others): Rate limit

原因:

Dataproc 代理已达到作业提交速率限制。

解决方案:

  1. 默认情况下,系统限制在 1.0 QPS 提交 Dataproc 代理作业,您可以在使用 dataproc:dataproc.scheduler.job-submission-rate 集群属性创建集群时将其设置为其他值。

查看作业状态。

如需查看作业状态和详细信息,请参阅作业监控和调试