
# 配置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等问题。
为了在小内存模式下能加载较大日志文件，需要对大应用开启日志滚动功能。一般情况下，长时间运行的应用建议打开该功能。
#### 配置参数
1. 登录FusionInsight Manager系统。 
   详细操作请参考[访问集群Manager](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_2124.html)。
   
   
2. 选择"集群 \> 服务 \> 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  |
      
   
   

3. 修改参数配置后，单击"保存"，根据界面提示操作后，等待配置保存成功。
4. Spark服务端配置更新后，如果"配置状态"为"配置过期"，则需重启组件以使配置生效。 
   图1修改Spark配置   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002305282932.png "点击放大")
   在Spark服务概览页面，选择"更多 \> 重启服务/滚动重启服务"，验证管理员密码后，等待服务重启成功。
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/warning_3.0-zh-cn.png)
   组件重启期间将无法对外提供服务，可能会影响集群的上层业务正常运行，请在业务空闲期或确认操作无影响后再执行本操作。
   
   
 
