您现在的位置是:课程

【赵强老师】Spark RDD的缓存机制

2023-06-29 21:12课程 人已围观

RDD通过cache方法或者persist方法可以将前面的计算结果缓存,但并不是立即缓存,而是在接下来调用Action类的算子的时候,该RDD将会被缓存在计算节点的内存中,并供后面使用。它既不是transformation也不是action类的算子。

缓存有可能丢失,或者存储存储于内存的数据由于内存不足而被删除,RDD的缓存容错机制保证了即使缓存丢失也能保证计算的正确执行。通过基于RDD的一系列转换,丢失的数据会被重算,由于RDD的各个Partition是相对独立的,因此只需要计算丢失的部分即可,并不需要重算全部Partition。

 

使用缓存的条件:(或者说什么时候进行缓存)

  1. 要求的计算速度快,对效率要求高的时候

  2. 集群的资源要足够大,能容得下要被缓存的数据

  3. 被缓存的数据会多次的触发Action(多次调用Action类的算子)

  4. 先进行过滤,然后将缩小范围后的数据缓存到内存中

 

如何选择存储级别

  • 如果RDD对于默认的存储级别是满足的,就不要选择其他了。这是性能最优的,最高效的(前提内存要足够,这是第一选择)

  • 如果MEMORY_ONLY不一定满足(即:内存不够),可以尝试使用MEMORY_ONLY_SER再加上一个序列化框架(kyro),这样内存的空间更好。序列化就是为了减少空间

  • 不要把数据写到磁盘,成本是非常高的。当数据太大的时候,可以过滤一部分数据再存,这样的话可能会更快

-->

站点信息

  • 文章统计篇文章