目前正在使用带有 Python 的 Google Dataflow 进行批处理。这工作正常,但是,我有兴趣在不必处理 Java 的情况下提高我的数据流作业的速度。
使用 Go SDK,我实现了一个简单的管道,它从 Google 存储中读取一系列 100-500mb 文件(使用 textio.Read
), 做一些聚合并用结果更新 CloudSQL。正在读取的文件数量可以从几十个到数百个不等。
当我运行管道时,我可以从日志中看到文件是串行读取的,而不是并行读取的,因此作业需要更长的时间。使用 Python SDK 执行的相同过程会触发自动缩放并在几分钟内运行多次读取。
我已经尝试使用 --num_workers=
指定工作人员的数量,但是,Dataflow 在几分钟后将作业缩减为一个实例,并且从日志中没有并行读取发生在实例运行的时间。
如果我删除 textio.Read
并实现自定义 DoFn 以从 GCS 读取,则会发生类似的情况。读取过程仍然串行运行。
我知道当前的 Go SDK 是实验性的并且缺少许多功能,但是,我没有找到关于并行处理限制的直接引用,here . Go SDK 的当前版本是否支持 Dataflow 上的并行处理?
提前致谢
最佳答案
实际上 creating my own IO package for the Go SDK 之后设法找到了答案.
SplitableDoFns Go SDK 中尚不可用。这一关键功能使 Python 和 Java SDK 能够并行执行 IO 操作,因此在规模上比 Go SDK 快得多。
关于go - 当前用于 Google Dataflow 的 GoLang SDK 是否支持自动缩放和并行处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52409740/