首页 > 解决方案 > GCP 数据流批处理作业 - 防止工作人员在批处理作业中一次运行多个元素

问题描述

我正在尝试在 GCP 数据流中运行批处理作业。作业本身有时会占用大量内存。目前工作不断崩溃,因为我相信每个工人都试图同时运行 pcollection 的多个元素。有没有办法防止每个工人一次运行多个元素?

标签: pythongoogle-cloud-platformdataflow

解决方案


Beam 的原理是编写一个处理描述,让运行时环境(这里是数据流)运行它并自动分发它。你无法控制它在幕后所做的事情。

但是你可以尝试不同的东西

  • 创建一个窗口并触发窗格中的每个元素。我不知道这是否有助于更好地并行分配流程,但您可以尝试一下。
  • 另一种解决方案是外包处理(如果可能)。创建一个 Cloud Functions 或 Cloud Run(每个 Cloud Run 实例最多可以有 16Gb 的内存和 4 个 CPU)并将并发(对于 Cloud Run)设置为 1(每个实例仅处理 1 个请求,因此有 16Gb仅专用于一个处理 -> 此行为(并发 = 1)默认情况下与 Cloud Functions 一起使用)。在您的数据流作业中,对该外部服务执行 API 调用。但是,您最多可以同时拥有 1000 个实例。如果您的工作负载需要更多,您可能会因为资源不足而出现 429 HTTP 错误代码。
  • 最新的解决方案是等待 Dataflow 的新的无服务器运行时,它会在没有“worker”对象的情况下自动扩展 CPU 和内存。它将被完全抽象化,并且承诺不再出现内存不足的崩溃!不过,不知道什么时候计划好的。

推荐阅读