Databricks Spark作业长期运行且Executor因HTTP请求销毁问题排查
排查Spark作业Executor被销毁+shuffle文件丢失的根本原因
核心逻辑链:FUSE错误与Worker下线的关联
FuseLogAggregator无法识别uc-volumes存储方案是触发后续问题的核心诱因,完整逻辑链如下:
Executor端FUSE组件遇到无法解析的
uc-volumes存储协议 → 触发未处理的IO错误 → Worker节点被标记为异常状态 → 集群通过HTTP端点发送kill请求销毁Worker → Worker本地存储的shuffle文件随节点销毁丢失 → 作业出现Executor逐个下线的现象
根本原因排查方向
1. 作业或元数据中意外引入UC Volumes路径
当前环境依赖Thrift+Hive元数据访问ADLS挂载数据,且未启用Unity Catalog(UC),但存在以下情况:
- Hive元数据中,作业访问的表
location字段包含uc-volumes://开头的路径(比如测试环境遗留配置); - 作业代码/配置中硬编码或动态生成了UC Volumes路径,误引入了非当前环境支持的存储协议。
2. Executor端FUSE组件未适配UC Volumes
Spark 12.2.x(如Databricks Runtime 12.2)中,UC Volumes的FUSE支持需要特定配置:
- 若集群未启用UC,Executor节点的FUSE组件未加载
uc-volumes协议的解析器,遇到该协议的IO请求时直接报错; - 存在错误配置的参数(如
spark.hadoop.fs.AbstractFileSystem.uc-volumes.impl被误设置),导致FUSE组件尝试加载不存在的实现类,触发异常。
3. 触发销毁的命令关联UC Volumes操作
Driver日志显示某命令执行后Executor开始销毁,需聚焦该命令的具体行为:
- 命令涉及动态资源调整(如手动decommission、自动扩缩容)时,需确认是否错误触发了Worker下线,但结合FUSE错误,更可能是命令触发了UC Volumes相关的IO操作;
- 命令修改了Spark存储配置(如
spark.sql.catalog相关参数),导致Executor端存储协议解析逻辑混乱,触发异常。
验证与修复步骤
- 定位关键命令:提取Driver日志中触发销毁的命令内容,分析是否涉及UC Volumes路径或配置修改;
- 扫描元数据路径:通过Hive CLI或元数据查询工具,检查所有作业访问表的
location字段,清理uc-volumes://开头的无效路径; - 验证FUSE配置:查看Executor节点的Spark配置,确认未加载UC Volumes相关的FUSE解析器,若有错误配置则移除;
- 最小化测试:构造仅读取ADLS挂载数据的最小作业,观察是否还会出现Worker被销毁的情况,逐步添加原有逻辑定位问题点。
内容的提问来源于stack exchange,提问作者Sridevi R
相关产品推荐
相关产品推荐

