使用 Google DataFlow/Apache Beam 来并行化图像处理或抓取任务是否有意义?

Does it make sense to use Google DataFlow/Apache Beam to parallelize image processing or crawling tasks?

我正在考虑 Google DataFlow 作为 运行 管道的一个选项,该管道涉及以下步骤:

  1. 正在从网络下载图像;
  2. 正在处理图像。

我喜欢 DataFlow 管理完成工作所需的 VM 的生命周期,因此我不需要自己启动或停止它们,但我遇到的所有示例都将它用于数据挖掘类任务。我想知道它是否是其他批处理任务(如图像处理和抓取)的可行选择。

此用例可能适用于 Dataflow/Beam。

如果您想以流方式执行此操作,您可以让爬虫生成 URL 并将它们添加到 PubSub 或 Kafka 队列;并编写一个 Beam 管道来执行以下操作:

  1. 从 PubSub 读取
  2. 在 ParDo 中下载网站内容
  3. 从另一个 ParDo 中的网站解析图像 URL*
  4. 下载每个图像并再次使用 ParDo 对其进行处理
  5. 根据您希望从图像中获取的信息,将结果存储在 GCS、BigQuery 或其他数据库中。

您可以对批处理作业执行相同的操作,只需更改您从中读取 URL 的源。

*解析这些图像 URL 后,您可能还想重新排列数据,以获得一些并行性。