我想知道我是否可以直接在Google Dataflow平台中缓存数据集(比如在Spark中缓存RDD)。
如果没有此类功能,Dataflow如何在应用程序中选择热门数据集,特别是如果您有多个热门数据集,并且您希望根据数据集的重要性确定缓存的优先级?
答案 0 :(得分:3)
Dataflow与Spark的执行模型截然不同。在Spark中,核心概念是RDD,使用RDD的典型模式是以不可预测的方式以交互方式查询它。因此,RDD需要缓存,可能由用户控制。
在Dataflow(Apache Beam)中,中心概念是Pipeline
,构建和优化并作为整体整体执行,其中PCollection
(最接近RDD的模拟)仅仅是一个逻辑节点管道。
这两种方法都有其优点,但使用Dataflow的方法,Dataflow确切知道如何在管道中使用PCollection
,因此不会涉及不可预测性,也不需要缓存策略。 / p>
数据流目前在Google云端存储上的临时文件中实现了某些中间PCollection
,尝试使用fusion尽可能避免实现。如果实现了PCollection
,那么处理此集合的管道阶段将需要从云存储中读取它;否则(如果阶段与产生数据集的阶段融合),它将在内存中处理数据集的元素,在生成它们的同时,共同位于生成它们的工作者上。
GroupByKey
操作等(例如Combine
)是特殊的:Dataflow有几个GroupByKey
的实现,批处理和流管道之间有所不同;他们要么在VM上使用本地磁盘来存储数据,要么使用high-performance Google internal infrastructure。