zoukankan      html  css  js  c++  java
  • Saprk checkpoint、cache、persist的区别

    持久化类型 特点
    cache 默认存储级别为:
    RDD.cache():persist(StorageLevel.MEMORY_ONLY)
    Dataset.cache():MEMORY_AND_DISK
    persist 可以自定义存储级别,默认:MEMORY_AND_DISK
    可选:
    DISK_ONLY,
    DISK_ONLY_2,
    MEMORY_ONLY,
    MEMORY_ONLY_2,
    MEMORY_ONLY_SER,
    MEMORY_ONLY_SER_2,
    MEMORY_AND_DISK,
    MEMORY_AND_DISK_2,
    MEMORY_AND_DISK_SER,
    MEMORY_AND_DISK_SER_2
    NONE
    OFF_HEAP
    checkpoint 返回此数据集的检查点版本。
    检查点可用于截断此数据集的逻辑计划,
    这在计划可能指数增长的迭代算法中特别有用。
    它将被保存到用SparkContext#setCheckpointDir设置的检查点目录内的文件中。
    persist落盘不同的是,此处落盘在任务失败重启后可以重新使用,
    在迭代计算非常复杂的情况,适当checkpoint时非常有好处的

    注意:
    1. Dataset.cache()默认MEMORY_AND_DISK是因为重新计算基础表的内存中列表示是非常昂贵的。

    2. 至于persist基本就是内存、落地磁盘、是否序列化、是否备份的各种组合,

    3. MEMORY_AND_DISK*的落地磁盘是在内存不够的时候才部分落地磁盘,落盘部分会进行序列化

    4. DISK_ONLY*的落地磁盘是直接落盘,不在内存存储,落盘会进行序列化

    5. checkpoint会删除对此Dataset父Dataset的引用,依赖链会断掉,起到切断血缘的效果
    因为此时数据已经持久化到硬盘,不需要重新计算
    所以在对某个ds进行checkpoint时,建议先进行一次ds持久化否则在使用checkpoint时会开启一个计算,浪费资源。


    下面是存储级别的表,通过空间,cpu和性能的影响

    级别 内存使用 cpu时间 内存 磁盘 序列化 重新计算某些分区
    MEMORY_ONLY High Low Y N N Y
    MEMORY_ONLY_SER Low High Y N Y Y
    MEMORY_AND_DISK High Medium Some Some Some N
    MEMORY_AND_DISK_SER Low High Some Some Y N
    DISK_ONLY Low High N Y Y N

    使用cache、persist的好处

    • 减少计算开销:Spark的计算资源是非常宝贵的,所以通过复用计算可以减少计算开销
    • 时间效率:重用重复计算节省大量时间。 所以我们可以在相同时间内执行更多任务
  • 相关阅读:
    Chrome 无法登录 GitHub,响应时间过长,可行解决办法
    npm install报错 npm ERR! cb() never called! 检查镜像源!
    Win10 移动文件的时候“卡”在“正在暂停/取消”解决办法
    VS code 彻底关闭插件自动更新功能
    箭头函数 函数中的this指向
    ES6 ES6变量的声明
    范围内的拖拽事件
    div拖拽移动事件
    事件对象的属性 div点击移动事件
    tab切换之循环遍历
  • 原文地址:https://www.cnblogs.com/lillcol/p/14780237.html
Copyright © 2011-2022 走看看