
# 配置Spark Executor退出时执行自定义代码
#### 操作场景
在Spark中，Executor是负责在集群的工作节点上执行具体任务的进程。当Executor关闭时，通常要进行一系列的清理操作，例如释放内存、关闭文件句柄、断开网络连接等。这些清理操作可能会因为各种原因而耗时较长。为了避免清理操作无限期阻塞，可以设置一个最大超时时间。当清理操作超过这个时间时，系统会采取相应的措施，强制终止清理进程，确保集群资源的及时释放与高效利用。
Spark提供了Executor退出时执行自定义清理代码的机制，用户可通过配置参数启用该功能并设置超时时间，使Executor在退出时自动执行资源清理逻辑，避免残留临时文件或未释放的外部资源。
**典型应用场景：**
- 临时文件清理：Executor运行过程中产生的临时文件，需在退出时自动删除，避免磁盘空间浪费。
- 外部资源释放：Executor持有外部连接（如数据库连接、消息队列连接），需在退出时确保连接正确关闭。
- 缓存数据持久化：Executor缓存的中间计算结果，需在退出前写入持久化存储。
 
#### 约束与限制
本章节仅适用于MRS 3.2.0-LTS及之后版本。
#### 配置参数
1. 安装Spark客户端。 
   详细操作请参考[安装MRS客户端](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_2127.html)。
   
   
2. 使用客户端安装用户登录Spark客户端节点。 
   在Spark客户端的"*{客户端安装目录}*/Spark/spark/conf/spark-defaults.conf"配置文件中进行设置，修改如下参数：
   
   | **参数**                                              | **参数说明**                                                                                                                                                                                                                                                                                                                                                      | 取值示例 |
   |:---|:---|:---|
   | spark.executor.execute.shutdown.cleaner             | Spark中控制Executor关闭时资源清理行为的配置参数。该参数决定了当Executor退出时，是否执行额外的清理操作（如删除临时文件、释放外部资源等），确保集群环境的及时释放与高效利用。 - true：支持Executor退出时执行清理操作。  - false：默认值为 false，即默认不执行清理操作。   | true |
   | spark.executor.execute.shutdown.cleaner.max.timeout | Spark中控制Executor关闭时资源清理最大超时时间的配置参数。该参数限定了Executor在退出前执行清理操作（如删除临时文件、释放外部资源）的最长等待时间，确保清理过程不会无限阻塞Executor的关闭。                                                                                                                                                                                                                                                   | 240s |
      
   
   
3. 验证配置是否生效： 
   提交一个测试Spark作业，在作业完成后查看Executor日志（位于Executor所在节点的Spark日志目录中），确认日志中出现清理操作的执行记录。如配置未生效，请检查spark-defaults.conf文件路径是否正确、参数格式是否符合"参数名 值"格式（空格分隔）、是否存在拼写错误。
   
   
 
#### 相关文档
- 了解如何安装和使用Spark客户端，具体请参考[Spark客户端使用实践](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1929.html)。
- 如需了解Spark常用配置参数的含义和用法，具体请参考[Spark常用配置参数](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1931.html)。
- 了解Spark常用配置参数的含义和用法，具体请参考[Spark常用配置参数](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1931.html)。
- **常见问题：**
  - **配置不生效**：请检查spark-defaults.conf文件路径是否为"{客户端安装目录}/Spark/spark/conf/spark-defaults.conf"，参数格式是否为"参数名 值"（空格分隔），是否存在拼写错误。配置修改后需重新提交作业才能生效。
  
  - **清理超时日志在哪里查看**：超时信息记录在Executor所在节点的Spark日志中，日志路径通常为"{日志目录}/spark/executor/Executor日志文件"。搜索关键字"shutdown"或"timeout"可快速定位。
  
  - **如何确认清理操作是否执行**：在Executor日志中搜索清理操作的执行记录。如启用了清理功能但日志中无相关记录，可能是Executor正常退出前未触发清理逻辑，请检查参数值是否为true。
   
 
