首页 > 解决方案 > 当前的 GoLang SDK for Google Dataflow 是否支持自动缩放和并行处理?

问题描述

目前使用带有 Python 的 Google Dataflow 进行批处理。这很好用,但是,我有兴趣从我的数据流作业中获得更快的速度,而不必处理 Java。

使用 Go SDK,我实现了一个简单的管道,它从 Google 存储(使用)读取一系列100-500mbtextio.Read文件,进行一些聚合并使用结果更新 CloudSQL。正在读取的文件数量可以从几十个到几百个不等。

当我运行管道时,我可以从日志中看到文件正在被串行读取,而不是并行读取,因此作业需要更长的时间。使用 Python SDK 执行的相同过程会触发自动缩放并在几分钟内运行多次读取。

我尝试使用 指定工作人员的数量--num_workers=,但是,Dataflow 在几分钟后将作业缩小到一个实例,并且从日志中看,在实例运行期间没有发生并行读取。

如果我删除textio.Read并实现自定义 DoFn 以从 GCS 读取,则会发生类似的事情。读取过程仍然是串行运行的。

我知道当前的 Go SDK 是实验性的并且缺少许多功能,但是,我还没有找到对并行处理限制的直接参考,here。Go SDK 的当前版本是否支持 Dataflow 上的并行处理?

提前致谢

标签: gogoogle-cloud-platformgoogle-cloud-dataflowapache-beam

解决方案


在实际为 Go SDK 创建我自己的 IO 包之后,设法找到了答案。

SplitableDoFns在 Go SDK 中尚不可用。这一关键功能使 Python 和 Java SDK 能够并行执行 IO 操作,因此在规模上比 Go SDK 快得多。


推荐阅读