ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Spark缓存持久化终极版

Spark缓存持久化终极版 以后看到 DataFrame3 秒就能决定用哪种绝不踩坑。一、终极选择口诀小且多次用 → cache大且多次用 → 写临时表超长链 / 防 OOM → checkpoint只用一次 → 啥都不用二、详细判断标准1. 用 .cache() 的场景满足 全部 条件过滤后数据 20GB 或 远小于资源内存同一个 DF 要 被调用 2 次以上后面有 join /union/ 多次 count /show集群内存不紧张血缘链不长不会出现递归计算优点最快、最简单风险太大必 OOM不断血缘链# 1. 加载并缓存小表dfspark.read.parquet(small_data).cache()# 2. 多次使用df.filter(...).count()df.join(...)df.groupBy(...).count()# 3. 使用完释放内存重要df.unpersist()# 主动清理缓存释放内存2. 用 写临时表方案 A 的场景满足 任意一条 就用它过滤后数据 20GB50GB担心 OOM、想要绝对稳定任务要跑很久不想中途重算需要调试、想看中间数据要被多个段落、多个 job 重复使用优点永不爆内存、可断点续跑、可查中间表缺点多一次 IO 写入但换来超级稳# 1. 写入临时表磁盘存储df.write.saveAsTable(temp_novel_data)# 2. 直接读表使用多次用都稳dfspark.read.table(temp_novel_data)# 后续任意计算df.groupBy(...).count()# 清理临时表spark.sql(DROP TABLE IF EXISTS temp_novel_data)3. 用 .persist(xxx) 的场景想缓存但不想占太多内存数据中等不想写表又怕 cache 爆精细控制缓存级别内存 磁盘、只磁盘等一般新手不用刻意记直接用 cache 或临时表即可。核心依然不断血缘不能根治 OOM纯内存默认cacheMEMORY_ONLY内存磁盘推荐防OOMMEMORY_AND_DISK纯磁盘DISK_ONLYfrompyspark.storagelevelimportStorageLevel# 内存磁盘序列化最常用、最稳dfdf.persist(StorageLevel.MEMORY_AND_DISK)# 多次使用df.show()df.count()# 清理df.unpersist()4. 用 checkpoint 的场景核心防 OOM、断血缘Checkpoint 本质就是把整个 DF 全量落盘写一遍磁盘开销 一次全量数据的读写 IO 一次 Job 计算CPU 微增、内存几乎不增、磁盘 IO 明显增加但换来血缘截断、杜绝 OOM、任务不崩满足 任意一条 必须用计算链路极长多次 join/groupBy/ 窗口 / 迭代出现过 OOM 报错尤其是 Driver 栈溢出机器学习 / 迭代计算循环反复使用同一个 DF需要彻底切断血缘依赖释放内存数据不需要反复调试只需要作为中间断点优点唯一能斩断血缘、根治长链 OOM缺点需要指定目录写入磁盘比 cache 慢和 cache 区别cache 存数据checkpoint 断血缘链条越长 → 构建计划越耗内存 → Driver/Executor 直接 OOM# 1. 设置 checkpoint 目录本地用 /tmp/...集群用 HDFS 路径spark.sparkContext.setCheckpointDir(hdfs:///user/spark/checkpoint)# 2. 长链路后执行断链防OOM核心dfdf.checkpoint(eagerTrue)# 后续使用血缘已断绝对不爆df.groupBy(...).count()# 第一次Actiondf.count()# 第二次Actiondf.show()# 第三次Actiondf.join()# 第三次Action# Python 清理目录importshutil shutil.rmtree(/tmp/spark-checkpoints,ignore_errorsTrue)5. 啥都不用直接裸奔DF 只使用一次后面直接 write 保存结果。数据极大连临时表都不写这种情况 Spark 流水线串行最省资源。三、秒选情况选择核心作用小表、多次用cache加速计算纯内存最简单中等表、怕内存爆、想更稳persist (内存 磁盘)可控缓存兼顾速度与稳定性大表、多次用写临时表稳定、不爆内存长链 / 迭代 / 防 OOMcheckpoint斩断血缘根治 OOM只用一次不缓存省资源怕 OOM、要稳定写临时表 /checkpoint保证任务不崩调试、看中间数据写临时表可查询、可回溯四、最关键一句话总结cache/persist 提速不断链 → 不治 OOM临时表 稳定、大数据专用checkpoint 断血缘、防崩溃 → 专治 OOM
返回列表