go - 当前用于 Google Dataflow 的 GoLang SDK 是否支持自动缩放和并行处理?

标签 go google-cloud-platform google-cloud-dataflow apache-beam

目前正在使用带有 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/

相关文章:

string - 如何从字符串中获取单个 Unicode 字符

go - Go 中是否有等效于文件的 ReadLine?

java - 如何在 Google App Engine 中设置环境变量/应用程序 secret

kubernetes - 向谷歌容器引擎编写启动脚本

java - 如何在日志导出中将 pubsub 负载转换为 LogEntry 对象

google-cloud-dataflow - 如何在IDE上本地开发Beam Pipeline并在Dataflow上运行?

go - 如何处理客户端超时错误?

node.js - 使用 NodeJS 将文件上传到谷歌云存储

google-cloud-dataflow - 云数据流中最大并发作业数

input - golang接受带空格的输入