我是星火公司的新手,我想了解是否会有额外的开销/延迟来持久化和不持久化内存中的数据。
据我所知,在我们使用缓存数据saved时没有发生数据移动,它只是保存在executor的内存中。因此,这应该只是一个设置/取消一个标志的问题。
我在火花流作业中缓存数据帧,并想知道这是否会导致批处理执行中的额外延迟。
发布于 2020-04-07 04:07:11
如果存在额外的开销/延迟,则为
,而非持久化内存中的数据。
那得看情况。如果您只将一个DataFrame标记为持久化,那么实际上不会发生任何事情,因为它是一个惰性操作。您必须执行一个操作来触发DataFrame持久性/缓存。使用此操作,确实会增加额外的开销。
此外,将持久化(缓存)视为一种预先计算数据并将其保存到更接近执行器(内存、磁盘或它们的组合)的方法。这个从它所在的位置移动到执行器的数据在执行时确实会增加额外的开销(即使它只是一点点)。
在内部,Spark将数据管理为块(在执行器上使用BlockManagers )。它们是按需交换块的对等方(使用类似于洪流的协议)。
取消DataFrame只是向BlockManagers发送一个请求(同步或异步)以删除RDD块。如果以异步方式发生,则开销为none (减去运行任务时需要执行的额外工作)。
,所以它应该只是设置/取消一个标志的问题。
从某种意义上说,这就是幕后的情况。由于DataFrame或RDD只是描述分布式计算的抽象,而在创建时不做任何操作,因此持久化/未持久化只是设置/取消一个标志。
在执行时可以注意到更改。
我在火花流作业中缓存一个数据文件,并想知道这是否会导致批处理执行中的额外延迟。
如果您使用异步缓存(默认),则应该有非常小的延迟。
https://stackoverflow.com/questions/61074859
复制相似问题