
# 配置Spark Eventlog日志回滚
#### 配置场景
事件日志滚动是一种日志管理技术，通过将日志文件按时间或大小分割成多个文件，来避免单个日志文件过大。滚动日志文件可以提高日志的管理和分析效率，特别是在处理大量日志数据时。
事件日志记录了Spark应用程序的执行过程中的各种事件，如任务的启动和完成、阶段的提交和完成等。当程序长时间运行，会导致job和task过多，造成日志文件很大，如JDBCServer、Spark Streaming程序。启用事件日志滚动可以帮助管理日志文件的大小，避免单个日志文件过大导致的问题。
而日志回滚功能是指在写事件日志时，将元数据事件（EnvironmentUpdate、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系统，选择"集群 \> 服务 \> Spark2x \> 配置"，单击"全部配置"，搜索以下参数。
| **参数**                                 | **说明**                                                                                                                                                                                                                                                                                                                          | **默认值**                                     |
|:---|:---|:---|
| 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  |
   
