首页 > 解决方案 > Dataflow Sideinputs - SDK 2.x 中的工作器缓存大小

问题描述

我在使用约 1GB 大侧输入的 DoFn 中的管道中遇到性能问题。侧输入使用 pvalue.AsList() 传递,它强制实现侧输入。

管道的执行图显示特定步骤花费大部分时间来读取侧输入。读取的数据总量远远超过了侧输入的大小。因此,我得出结论,即使他们的 RAM 足够(使用具有 26 GB RAM 的 n1-highmem4 工作人员),侧面输入也不适合工作人员的内存/缓存。

我怎么知道这个缓存实际上有多大?有没有办法使用 Beam Python SDK 2.15.0 来控制它的大小(就像 Java 1.x SDK 的管道选项 --workerCacheMb=200 一样)?

没有简单的方法可以将我的边输入缩小 10% 以上。

标签: pythongoogle-cloud-dataflow

解决方案


如果您正在使用AsList,则应该将整个侧面输入加载到内存中是正确的。可能是您的工作人员有足够的可用内存,但是将 1GB 的数据读入列表需要很长时间。此外,读取的数据大小取决于它的编码。如果您可以分享有关您的算法的更多详细信息,我们可以尝试找出如何编写可以更有效地运行的管道。


另一种选择可能是使用外部服务来保留您的侧面输入 - 例如,您在一侧写入的 Redis 实例,在另一侧写入红色。


推荐阅读