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