解决spark日志清理问题
背景
由于采用了sparkstreaming 任务一直再运行导致日志文件暴涨,达到了硬盘的预警,不得已必须指定策略定期删除日志已保证服务器硬盘空间。
spark的日志分类
spark的日志都有那些:
1.event(history)
2.work
3.executor
解决方法
方案1
一开始为了快速实现日志清理,选择了脚本自动清理,写了shell脚本便于清理历史文件,但是会有很多细节甚至有些文件不能删除(由于进程占用),这里不做详细介绍了。
方案2
spark配置来解决这几个问题
conf文件下面的两个文件中修改配置:
1.解决executor(work目录) 日志太大的问题,修改spark-defaut.conf
# 日志循环复写的策略(一般就是size和time)这里受限于空间选择了大小
spark.executor.logs.rolling.strategy size
# 设定复写的大小,这里设定了1G spark.executor.logs.rolling.maxSize 1073741824
# 设定组大保留文件 spark.executor.logs.rolling.maxRetainedFiles 100
# 设定更新周期这里选择一小时检查一次是否超过最大值 spark.executor.logs.rolling.time.interval hourly
2.解决历史日志问题spark-env.sh 文件添加 历史日志清洗参数配置
export SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=/export/opt/spark/spark2.4.0/logs -Dspark.history.fs.cleaner.enabled=true -Dspark.history.fs.cleaner.interval=1d -Dspark.history.fs.cleaner.maxAge=2d -Dspark.history.retainedApplications=100"
3.woker日志清理同上文件
export SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.interval=1800 -Dspark.worker.cleanup.appDataTtl=86400"
方案3
log4j 替代默认的日志记录,再shell的提交脚本中加入如下参数
--files "./log4j.properties" \ --driver-java-options "-Dlog4j.debug=true -Dlog4j.configuration=log4j.properties" \ --conf spark.driver.extraJavaOptions='-Dlog4j.configuration=file:/opt/spark/conf/log4j.properties' \
总结
再实际应用过程中依然有很多不能日志复写或者不能文件导致日志太大的问题,需要具体问题具体解决。比如spark3.0 才支持history日志循环写。另外yarn模式和standalone 也有很多不同,需要区别处理。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
2019-11-18 Flink入门介绍
2015-11-18 XML 在SQLServer中的使用