Straggler 是指通过阻止工作并行执行,拖慢 Dataflow 作业速度的工作项。
Straggler 是具有以下特征的工作项:
- 完成 Straggler 花费的时间比完成同一阶段中其他工作项花费的时间长很多。
- Straggler 会降低阶段内的并行性。
- Straggler 会阻止新工作启动。
在最糟糕的情况下,由于一小部分工作正在进行中,Straggler 会阻止阶段完成,因而导致作业出现整体延迟。
Dataflow 可检测在批量作业期间发生的 Straggler。如果 Dataflow 检测到 Straggler,还会尝试确定 Straggler 的原因。
在 Dataflow 监控界面中查看 Straggler
启动 Dataflow 作业后,您可以使用 Google Cloud 控制台查看任何检测到的 Straggler。
您可以按阶段或工作器查看 Straggler。使用视图可找到哪些阶段存在 Straggler,然后精确定位每个阶段中出现 Straggler 的工作器。
按阶段查看 Straggler
如需按阶段查看 Straggler,请执行以下操作:
在 Google Cloud 控制台中,前往 Dataflow 作业页面。
前往作业
点击作业的名称。
在作业详情页面中,点击执行详情标签页。
在图表视图列表中,选择阶段进度。进度图显示每个阶段中检测到的所有 Straggler 的汇总计数。
如需查看某阶段的详细信息,请将鼠标悬停在该阶段对应的条形上。如需查看该阶段的工作器,请点击详细信息面板中的查看工作器。
按工作器查看 Straggler
如需按工作器查看 Straggler,请执行以下操作:
在 Google Cloud 控制台中,前往 Dataflow 作业页面。
前往作业
点击作业的名称。
在作业详情页面中,点击执行详情标签页。
在图表视图列表中,选择工作器进度。
在按阶段过滤工作器列表中,选择相应阶段。进度图显示针对该阶段检测到的任何 Straggler。条形在首次检测到 Straggler 的位置存在较深的阴影。
如需查看某工作器的详细信息,请将鼠标悬停在该工作器对应的条形上。
在阶段信息面板中,Straggler 详细信息部分列出了页面上显示的所有工作器的 Straggler,其中包含以下信息:
- 检测到 Straggler 的开始时间。
- 出现 Straggler 的工作器。
- 原因(如果已知)。
排查 Straggler 问题
Dataflow 可检测 Straggler 的以下原因:
热键。热键是一个键,表示元素明显多于同一
PCollection
中的其他键。如需了解详情,请参阅本文档中的排查由热键导致的 Straggler 问题。未确定的原因。对于未确定原因的 Straggler,请参阅流水线问题排查和调试文档中针对批量作业缓慢的一般问题排查步骤。
排查由热键导致的 Straggler
各种因素可能会导致 Straggler,但一种常见的原因是存在热键。热键是一个键,表示元素明显多于同一 PCollection
中的其他键。热键可能会造成 Straggler,因为它们会限制 Dataflow 并行处理元素的能力。
如果 Dataflow 检测到由热键导致的 Straggler,则 Straggler 详细信息面板会列出 Hot Key
作为原因。
默认情况下,Dataflow 不会显示热键的键值。如需显示键值,请在运行作业时将 hotKeyLoggingEnabled
流水线选项设置为 true
。
要解决此问题,请检查您的数据是否均匀分布。如果某个键具有异常多的值,请考虑执行以下操作流程:
- 重新生成数据键。应用
ParDo
转换来输出新的键值对。 - 对于 Java 作业,请使用
Combine.PerKey.withHotKeyFanout
转换。 - 对于 Python 作业,请使用
CombinePerKey.with_hot_key_fanout
转换。 - 启用 Dataflow Shuffle。
后续步骤
- 了解如何使用 Dataflow 监控界面。
- 了解监控界面中的执行详情标签页。