提问者:小点点

当前用于Google数据流的GoLongSDK是否支持自动缩放和并行处理?


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

使用GoSDK,我实现了一个简单的管道,从谷歌存储中读取一系列100-500mb的文件(使用textio.Read),进行一些聚合并用结果更新CloudSQL。被读取的文件数量从几十到几百不等。

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

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

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

我知道当前的GoSDK是实验性的,缺乏许多功能,但是,我在这里没有找到关于并行处理限制的直接参考。GoSDK的当前版本是否支持数据流上的并行处理?

提前谢谢


共2个答案

匿名用户

在为GoSDK创建了自己的IO包后,我设法找到了答案。

SplitableDoFns在GoSDK中尚不可用。这一关键功能允许Python和JavaSDK并行执行IO操作,因此在规模上比GoSDK快得多。

匿名用户

现在(GO 1.16)它是内置的:

https://pkg.go.dev/google.golang.org/api/dataflow/v1b3