• Spark Persist与Cache checkpoint


    1.为什么要Cache / persist

    由于spark中的RDD都是只读不可变的对象,也就是RDD的每一个transformation操作都会产生一个新的RDD。所以Spark任务中的一个优化原则就是避免创建重复的RDD而尽量复用同一个RDD。

    当迭代使用到一个RDD的时候,我们不希望它重新从头trans一遍遍的计算,所以通过cache / persist的方法给他存到 内存/内&盘 中,下次使用,就直接拿出来就好了。

    2.cache persist区别

    cache调用了persist(),默认的persist就是MEMORY_ONLY,所以cache就是存在内存里头,而persist有12种,选吧你。

    3.persist的时候用什么级别好?

    针对占用内存不是很大的中间计算结果优先采用MEMORY_ONLY,它的性能最好(前提是内存要足够),也是RDD的默认策略。如果中间结果数据量稍大,可以采用MEMORY_ONLY_SER策略进行补充。

    如果内存无法容纳中间数据,那么建议使用MEMORY_AND_DISK_SER策略,该策略会优先将数据缓存在内存中,只有当内存不够时才会把数据写入磁盘。另外对于分布式任务,IO资源往往比CPU资源更加紧张,序列化后的数据可以节省内存和磁盘的空间开销。

    一般不用DIST_ONLY ,读起来慢的一匹,IO本来就很吃紧了,还添乱呢?

     4.persist和checkpoint?

    前者虽然可以将 RDD 的 partition 持久化到磁盘,但该 partition 由 blockManager 管理。一旦 driver执行结束,也就是 executor 所在进程stop,blockManager 也会 stop,被 cache 到磁盘上的 RDD 也会被清空

    后者截断血缘关系,将 RDD 持久化到 HDFS 或本地文件夹,如果不被手动 remove 掉,是一直存在的,也就是说可以被下一个 driver program 使用,而 cached RDD 不能被其他 dirver program 使用。

    为了提高效率,应该先cache,然后再checkpoint,这样就只需要计算一次了。

  • 相关阅读:
    互联网协议入门(一)(转)
    程序员的自我修养——操作系统篇(转)
    程序员的自我修养(2)——计算机网络(转)
    里氏替换原则
    Windows Phone 自学笔记 : ApplicationBar
    如何写好代码
    C# 通过操作注册表控制系统 (更新)
    优秀PPT 设计的十大秘诀
    设计模式学习--面向对象的5条设计原则
    SOLID (面向对象设计) From 维基百科
  • 原文地址:https://www.cnblogs.com/tillnight1996/p/12494117.html
Copyright © 2020-2023  润新知