python - GCP 数据流批处理作业 - 防止工作人员在批处理作业中一次运行多个元素
问题描述
我正在尝试在 GCP 数据流中运行批处理作业。作业本身有时会占用大量内存。目前工作不断崩溃,因为我相信每个工人都试图同时运行 pcollection 的多个元素。有没有办法防止每个工人一次运行多个元素?
解决方案
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 和内存。它将被完全抽象化,并且承诺不再出现内存不足的崩溃!不过,不知道什么时候计划好的。
推荐阅读
- rethinkdb - 如何在 RethinkDB 中查看文档 UUID
- blockchain - 调用构造函数并使用 web3 和 ropsten 进行部署
- javascript - 如何在 HTML/CSS 中使用语义 UI 创建模式?
- performance - 是什么导致在 Cortex-A72 上使用 -O0 而不是 -O3 的简单紧密循环的周期变化如此之大?
- json - 可以在不使用结构的情况下在 Golang 的 DynamoDB 中运行 PutItem 吗?
- reactjs - 存储在 AsyncStorage 中时反应导航清除数据 - 如何查看数据?
- ansible - 错误!冲突的操作语句:var、include_tasks
- git - 存储库是 .git 文件夹还是带有 .git 文件夹的目录?
- r - 使用“for”循环变量时如何从列表中引用变量
- google-apps-script - 谷歌脚本中可重用的谷歌文档选择器 - 选择器回调