Google 数据流的当前 GoLang SDK 是否支持自动缩放和并行处理?
Does the current GoLang SDK for Google Dataflow support Autoscaling and Parallel Processing?
目前正在使用 Google 数据流和 Python 进行批处理。这工作正常,但是,我有兴趣在不必处理 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 1.16)它是内置的:
目前正在使用 Google 数据流和 Python 进行批处理。这工作正常,但是,我有兴趣在不必处理 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 1.16)它是内置的: