博客
2016/05/18
Beam 的动态工作负载再平衡
Dan Halperin
今天早上,来自 Google Cloud Dataflow 团队的 Eugene 和 Malo 发布了 没有一个分片掉队:Google Cloud Dataflow 中的动态工作负载再平衡。这篇文章讨论了 Cloud Dataflow 解决众所周知的落后者问题的方案。
在一个具有许多并行执行任务的大型批处理作业中,一些任务(落后者)可能比其他任务花费更长的时间来完成,这可能是因为在发布作业时工作不完美地拆分为并行块。通常,等待落后者意味着整个作业完成的时间比预期晚,并且还可能预留过多的机器,这些机器在最后可能未得到充分利用。Cloud Dataflow 的动态工作负载再平衡可以在大多数情况下缓解落后者问题。
我想为 Apache Beam(孵化中)社区强调的是,Cloud Dataflow 的动态工作负载再平衡是使用运行器特定的控制逻辑在 Beam 的运行器无关的 BoundedSource API
之上实现的。具体来说,要从落后者那里窃取工作,运行器只需调用阅读器的 splitAtFraction 方法
。这将生成一个包含剩余工作的新源,然后运行器可以将该源传递给另一个空闲的 worker。随着 Beam 的成熟,我希望其他运行器有兴趣弄清楚这些 API 是否可以帮助它们提高性能,实现动态工作负载再平衡,并协作进行 API 更改以帮助解决其他痛点。