配置Spark Eventlog日志回滚
操作场景
事件日志滚动是一种日志管理技术,通过将日志文件按时间或大小分割成多个文件,来避免单个日志文件过大。滚动日志文件可以提高日志的管理和分析效率,特别是在处理大量日志数据时。
事件日志记录了Spark应用程序的执行过程中的各种事件,如任务的启动和完成、阶段的提交和完成等。当程序长时间运行,会导致job和ask过多,造成日志文件很大,如JDBCServer、Spark Streaming程序。启用事件日志滚动可以帮助管理日志文件的大小,避免单个日志文件过大导致的问题。
而日志回滚功能是指在写事件日志时,将元数据事件(EnviromentUpdate,BlockManagerAdded,BlockManagerRemoved,UnpersistRDD,ExecutorAdded,ExecutorRemoved,MetricsUpdate,ApplicationStart,ApplicationEnd,LogStart)写入日志文件中,Job事件(StageSubmitted, StageCompleted, TaskResubmit, TaskStart,TaskEnd, TaskGettingResult, JobStart,JobEnd)按文件的大小进行决定是否写入新的日志文件。对于Spark SQL的应用,Job事件还包含ExecutionStart、ExecutionEnd。
Spark中有个HistoryServer服务,其UI页面就是通过读取解析这些日志文件获得的。在启动HistoryServer进程时,内存大小就已经定了。因此当日志文件很大时,加载解析这些文件就可能会造成内存不足,driver gc等问题。
所以为了在小内存模式下能加载较大日志文件,需要对大应用开启日志滚动功能。一般情况下,长时间运行的应用建议打开该功能。
配置参数
- 登录FusionInsight Manager系统。
详细操作请参考访问集群Manager。
- 选择“集群 > 服务 > Spark2x/Spark > 配置”,单击“全部配置”,搜索并调整以下参数。
参数
参数说明
取值示例
spark.eventLog.rolling.enabled
是否启用滚动event log文件。如果设置为true,则会将每个event log文件缩减到配置的大小。
- true:Spark将启用事件日志滚动,将日志文件按配置的策略分割成多个文件。
- false:Spark不会启用事件日志滚动,所有日志将写入单个文件。
true
spark.eventLog.rolling.maxFileSize
当spark.eventlog.rolling.enabled=true时,指定要滚动的event log文件的最大大小。
取值范围:大于等于10MB
128M
spark.eventLog.compression.codec
用于压缩事件日志的编码解码器。默认情况下,spark提供四种编码解码器:lz4、lzf、snappy和zstd。如果没有给出,将使用spark.io.compression.codec。
取值范围:lz4、lzf、snappy和zstd
无
spark.eventLog.logStageExecutorMetrics
用于控制是否将每个执行器(executor)在每个阶段(stage)的指标峰值写入事件日志(event log)。
- true:Spark将在事件日志中记录每个执行器在每个阶段的指标峰值。
- false:Spark不会在事件日志中记录这些指标。
false
- 修改参数配置后,单击“保存”,根据界面提示操作后,等待配置保存成功。
- Spark服务端配置更新后,如果“配置状态”为“配置过期”,则需重启组件以使配置生效。
图1 修改Spark配置在Spark服务概览页面,选择“更多 > 重启服务/滚动重启服务”,验证管理员密码后,等待服务重启成功。
组件重启期间将无法对外提供服务,可能会影响集群的上层业务正常运行,请在业务空闲期或确认操作无影响后再执行本操作。