spark的容错机制

RDD需要多次使用------------spark的容错机制就是RDD数据的存储(持久化)

1、persist持久化机制

1)cache算子

复制代码
"""
将RDD缓存在内存中
cache()
底层调用的还是persist(StorageLevel.MEMORY_ONLY)------如果内存不够,缓存会失败
场景:资源充足,需要将RDD仅缓存在内存中

是一个转换算子
"""

2)persist算子

复制代码
"""
将**RDD**【包含这个RDD的依赖关系】进行缓存,可以**自己指定缓存的级别**【和cache区别】
语法:persist(StorageLevel)
StorageLevel决定了缓存位置和缓存几份

是一个转换算子
"""
# StorageLevel 的级别
# 将RDD缓存在磁盘中
StorageLevel.DISK_ONLY = StorageLevel(True, False, False, False)
StorageLevel.DISK_ONLY_2 = StorageLevel(True, False, False, False, 2)
StorageLevel.DISK_ONLY_3 = StorageLevel(True, False, False, False, 3)

# 将RDD缓存在内存中
StorageLevel.MEMORY_ONLY = StorageLevel(False, True, False, False)
StorageLevel.MEMORY_ONLY_2 = StorageLevel(False, True, False, False, 2)

# 将RDD优先缓存在内存中,如果内存不足,就缓存在磁盘中
StorageLevel.MEMORY_AND_DISK = StorageLevel(True, True, False, False)
StorageLevel.MEMORY_AND_DISK_2 = StorageLevel(True, True, False, False, 2)

# 使用堆外内存
StorageLevel.OFF_HEAP = StorageLevel(True, True, True, False, 1)

# 使用序列化
StorageLevel.MEMORY_AND_DISK_DESER = StorageLevel(True, True, False, True)


"""
常用的
"""
MEMORY_AND_DISK_2
MEMORY_AND_DISK_DESER

3)unpersist 算子 --释放缓存

复制代码
"""
将缓存的RDD进行释放
语法:unpersist
    ------unpersist(blocking=True):等释放完再继续下一步
    
如果不释放,这个Spark程序结束,也会释放这个程序中的所有内存
"""

4)示例

复制代码
sc = SparkContext(conf=conf)
fileRdd = sc.textFile("../resources/1.dat")
cacheRdd = fileRdd.persist(StorageLevel.MEMORY_AND_DISK_2)
print(type(cacheRdd))

cacheRdd.foreach(lambda x: print(x))
time.sleep(20)

cacheRdd.unpersist(blocking=True)

time.sleep(10)

# 使用完后,记得关闭
sc.stop()

将任务运行,运行过程中,发现内存中存储了50M的缓存数据

2、checkpoint检查点机制

为了避免重复构建RDD,可以将RDD进行persist缓存,但是如果缓存丢失,还是会重新构建RDD,怎么解决?------------checkpoint

  • 常用于机器学习和图处理等复杂计算任务中,它帮助减少长链依赖,增加任务的容错能力。

    复制代码
      # 设置一个检查点目录
      sc.setCheckpointDir("../datas/chk/chk1")
      # 将RDD的数据持久化存储在HDFS
      rs_rdd.checkpoint()
      rs_rdd.foreach(print)

    一定要在触发算子之前,调用checkpoint() 否则,检查点中没有数据

面试问题

RDD的cache、persist持久化机制和checkpoint检查点机制有什么区别?

复制代码
cache本质上就是persist(StorageLevel.MEMORY_ONLY) 所以只需要介绍persist和checkpoint的区别即可
1、存储位置:persist存放在内存和本地磁盘,checkpoint放在hdfs等可靠的存储
2、生命周期:persist可以手动释放或者该job执行完自动释放,checkpoint程序执行完仍然存在,不会删除
3、依赖关系:persist不会丢掉RDD之间的依赖链关系,checkpoint会丢掉
相关推荐
ACP广源盛139246256731 小时前
此芯 P1 AI BOX / AI NAS@ACP#IX8008、IX8024 应用场景与市场机会
大数据·人工智能·分布式·单片机·嵌入式硬件
其实防守也摸鱼1 小时前
KMP全栈开发:从Android到AI Agent的技术演进与实践
android·运维·网络·人工智能·学习·安全·macos
YM52e6 小时前
鸿蒙Flutter Padding内边距:EdgeInsets详解
android·学习·flutter·华为·harmonyos·鸿蒙
牛奔7 小时前
Go 如何打印调试深层或嵌套的结构体
开发语言·后端·golang
企业老板ai培训7 小时前
破解中小企业AI变现难:2026年企业AI培训与陪跑行业趋势深度报告,为何从‘陪跑’到‘变现’才是关键?
大数据·人工智能
geovindu8 小时前
go: Iterative Algorithms
开发语言·后端·算法·golang·迭代算法
学逆向的8 小时前
汇编——JCC指令
开发语言·汇编·网络安全
西安老张(AIGC&ComfyUI)8 小时前
第034章:ComfyUI&AIGC一阶段学习总结及下阶段学习安排
学习·aigc
aax12134539 小时前
VOC 集群治理工程实操|美丽蓝天绿岛项目 RTO 工艺选型、管控方案与申报要
大数据·数据库·人工智能
mayaairi9 小时前
JS循环语句深度解析:嵌套for、while与do...while
开发语言·前端·javascript