您现在的位置是:课程
【赵强老师】Spark RDD的缓存机制
2023-06-29 21:12课程 人已围观
RDD通过cache方法或者persist方法可以将前面的计算结果缓存,但并不是立即缓存,而是在接下来调用Action类的算子的时候,该RDD将会被缓存在计算节点的内存中,并供后面使用。它既不是transformation也不是action类的算子。
缓存有可能丢失,或者存储存储于内存的数据由于内存不足而被删除,RDD的缓存容错机制保证了即使缓存丢失也能保证计算的正确执行。通过基于RDD的一系列转换,丢失的数据会被重算,由于RDD的各个Partition是相对独立的,因此只需要计算丢失的部分即可,并不需要重算全部Partition。
使用缓存的条件:(或者说什么时候进行缓存)
-
要求的计算速度快,对效率要求高的时候
-
集群的资源要足够大,能容得下要被缓存的数据
-
被缓存的数据会多次的触发Action(多次调用Action类的算子)
-
先进行过滤,然后将缩小范围后的数据缓存到内存中
如何选择存储级别
-
如果RDD对于默认的存储级别是满足的,就不要选择其他了。这是性能最优的,最高效的(前提内存要足够,这是第一选择)
-
如果MEMORY_ONLY不一定满足(即:内存不够),可以尝试使用MEMORY_ONLY_SER再加上一个序列化框架(kyro),这样内存的空间更好。序列化就是为了减少空间
-
不要把数据写到磁盘,成本是非常高的。当数据太大的时候,可以过滤一部分数据再存,这样的话可能会更快
上一篇:机器学习从入门到BAT