Spark 为什么要持久化,一般什么场景下要进行 persist 操作?
spark 所有复杂一点的算法都会有 persist 身影,spark 默认数据放在内存, spark 很多内容都是放在内存的,非常适合高速迭代,1000 个步骤只有第一个输入数据,中间不产生临时数据,但分布式系统风险很高,所以容易出错,就要容错,rdd 出错或者分片可以根据血统算出来,如果没有对父 rdd 进行persist 或者 cache 的化,就需要重头做。 以 下 场 景 会 使 用 persist
1)某个步骤计算非常耗时,需要进行 persist 持久化
2)计算链条非常长,重新恢复要算很多步骤,很好使,persist
3)checkpoint 所在的 rdd 要持久化 persist。checkpoint 前,要持久化, 写个 rdd.cache 或者 rdd.persist,将结果保存起来,再写 checkpoint 操作, 这样执行起来会非常快,不需要重新计算 rdd 链条了。checkpoint 之前一定会进行 persist。
4)shuffle 之后要 persist,shuffle 要进性网络传输,风险很大,数据丢失重来,恢复代价很大
5)shuffle 之前进行 persist,框架默认将数据持久化到磁盘,这个是框架自动做的。
蓝海大脑 京ICP备18017748号-1