【发布时间】:2017-09-02 00:22:52
【问题描述】:
我想知道是否可以直接在 Google Dataflow 平台中缓存数据集(例如在 Spark 中缓存 RDD)。
如果没有这样的功能,Dataflow 如何在应用程序中挑选热数据集,特别是如果您有多个热数据集,并且您希望根据数据集的重要性优先缓存?
【问题讨论】:
标签: google-cloud-platform google-cloud-dataflow
我想知道是否可以直接在 Google Dataflow 平台中缓存数据集(例如在 Spark 中缓存 RDD)。
如果没有这样的功能,Dataflow 如何在应用程序中挑选热数据集,特别是如果您有多个热数据集,并且您希望根据数据集的重要性优先缓存?
【问题讨论】:
标签: google-cloud-platform google-cloud-dataflow
Dataflow 的执行模型与 Spark 截然不同。在 Spark 中,核心概念是 RDD,使用 RDD 的典型模式是以不可预知的方式交互查询它;因此,RDD 需要缓存,可能由用户控制。
在 Dataflow (Apache Beam) 中,核心概念是 Pipeline,作为一个整体构建、优化和执行,其中 PCollection(最接近 RDD)只是管道中的一个逻辑节点。
这两种方法各有优势,但通过 Dataflow 的方法,Dataflow 确切知道PCollection 将如何在管道中使用,因此不涉及不可预测性,也不需要缓存策略。
Dataflow 目前在 Google Cloud Storage 上的临时文件中实现了一些中间 PCollections,并试图通过使用 fusion 尽可能避免实现。如果实现了PCollection,则处理此集合的管道阶段将需要从 Cloud Storage 中读取它;否则(如果 stage 与生成数据集的 stage 融合),它将在内存中处理数据集的元素,当它们被生成时,它们将位于生成它们的 worker 上。
GroupByKey 操作和类似的操作(例如Combine)是特殊的:Dataflow 有多个GroupByKey 的实现,在批处理和流式管道之间有所不同;他们要么使用虚拟机上的本地磁盘来存储数据,要么使用high-performance Google internal infrastructure。
【讨论】: