排查批量作业中的 Straggler 问题

Straggler 是指通过阻止工作并行执行,拖慢 Dataflow 作业速度的工作项。

Straggler 是具有以下特征的工作项:

  • 完成 Straggler 花费的时间比完成同一阶段中其他工作项花费的时间长很多。
  • Straggler 会降低阶段内的并行性。
  • Straggler 会阻止新工作启动。

在最糟糕的情况下,由于一小部分工作正在进行中,Straggler 会阻止阶段完成,因而导致作业出现整体延迟。

Dataflow 可检测在批量作业期间发生的 Straggler。如果 Dataflow 检测到 Straggler,还会尝试确定 Straggler 的原因。

在 Dataflow 监控界面中查看 Straggler

启动 Dataflow 作业后,您可以使用 Google Cloud 控制台查看任何检测到的 Straggler。

您可以按阶段或工作器查看 Straggler。使用视图可找到哪些阶段存在 Straggler,然后精确定位每个阶段中出现 Straggler 的工作器。

按阶段查看 Straggler

如需按阶段查看 Straggler,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 Dataflow 作业页面。

    前往作业

  2. 点击作业的名称。

  3. 在作业详情页面中,点击执行详情标签页。

  4. 图表视图列表中,选择阶段进度。进度图显示每个阶段中检测到的所有 Straggler 的汇总计数。

  5. 如需查看某阶段的详细信息,请将鼠标悬停在该阶段对应的条形上。如需查看该阶段的工作器,请点击详细信息面板中的查看工作器

按工作器查看 Straggler

如需按工作器查看 Straggler,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 Dataflow 作业页面。

    前往作业

  2. 点击作业的名称。

  3. 在作业详情页面中,点击执行详情标签页。

  4. 图表视图列表中,选择工作器进度

  5. 按阶段过滤工作器列表中,选择相应阶段。进度图显示针对该阶段检测到的任何 Straggler。条形在首次检测到 Straggler 的位置存在较深的阴影。

  6. 如需查看某工作器的详细信息,请将鼠标悬停在该工作器对应的条形上。

阶段信息面板中,Straggler 详细信息部分列出了页面上显示的所有工作器的 Straggler,其中包含以下信息:

  • 检测到 Straggler 的开始时间。
  • 出现 Straggler 的工作器。
  • 原因(如果已知)。

排查 Straggler 问题

Dataflow 可检测 Straggler 的以下原因:

排查由热键导致的 Straggler

各种因素可能会导致 Straggler,但一种常见的原因是存在热键。热键是一个键,表示元素明显多于同一 PCollection 中的其他键。热键可能会造成 Straggler,因为它们会限制 Dataflow 并行处理元素的能力。

如果 Dataflow 检测到由热键导致的 Straggler,则 Straggler 详细信息面板会列出 Hot Key 作为原因。

默认情况下,Dataflow 不会显示热键的键值。如需显示键值,请在运行作业时将 hotKeyLoggingEnabled 流水线选项设置为 true

要解决此问题,请检查您的数据是否均匀分布。如果某个键具有异常多的值,请考虑执行以下操作流程:

后续步骤