go - 当前的 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 上的并行处理?
提前致谢
解决方案
在实际为 Go SDK 创建我自己的 IO 包之后,设法找到了答案。
SplitableDoFns在 Go SDK 中尚不可用。这一关键功能使 Python 和 Java SDK 能够并行执行 IO 操作,因此在规模上比 Go SDK 快得多。
推荐阅读
- flutter - type '(dynamic) => Null' 不是 '(String, dynamic) => void' of 'f' 的子类型
- java - Spring Boot 应用程序的 Azure 应用程序服务部署在 Jenkins 中不起作用
- angular-cli - 在 Angular 5 中按环境切换开发模式和产品模式
- linux - Linux通过名称掩码将文件从目录移动到目录
- apache-kafka - Kafka JDBC 源连接器插入或更新
- python - 是否可以遍历 prefect.Parameter?
- java - JAVA:从 Heapdump 读取 HashMap 对象内容
- r - 您如何计算在另一列中超过和低于特定数字的幅度(百分比)?
- swift - SwiftUI iOS 14 小部件倒计时
- python - 使用递归函数创建 Python 脚本以显示前 n 个整数的总和,其中 n 由用户输入