You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark Scala任务成功后未删除_temporary目录的排查与解决

排查Spark写入Hive表后_temporary目录未删除的问题

排查方向

  • 检查权限配置:确认执行Spark Driver的用户对Hive表存储路径具备完整的读写执行权限。因为_temporary目录由Executor写入后,需由Driver负责重命名并删除,若Driver用户无对应路径权限,会导致删除失败。可通过hdfs dfs -ls <表路径>查看目录权限,对比Driver运行用户的权限。
  • 查看HDFS namenode审计日志:namenode日志会记录所有文件系统操作,可查找针对_temporary目录的删除操作记录,排查是否存在权限拒绝、路径异常等错误信息。
  • 确认Spark写入模式与表类型:
    • 若使用append模式写入,需检查是否存在分区冲突或重复写入的隐性异常(即使任务日志无报错);
    • 外部表需确认存储路径是否为自定义非默认路径,部分场景下自定义路径的权限或目录结构可能干扰临时目录清理。
  • 检查Spark作业部署模式:若采用cluster模式提交作业,需确认Driver容器是否在任务完成后正常退出,未提前终止。可通过集群管理平台查看Driver容器的生命周期日志。
  • 核查Spark配置:
    • 检查是否启用spark.sql.legacy.allowCreatingManagedTableUsingNonemptyLocation,该配置可能改变Spark对已有目录的处理逻辑;
    • 确认是否自定义了spark.sql.sources.commitProtocolClass,若自定义提交协议未正确实现清理逻辑,会导致临时目录残留。

解决与阻止方法

  • 手动清理临时目录:临时解决可执行命令hdfs dfs -rm -r <表存储路径>/_temporary,注意不要误删有效数据。
  • 修复权限问题:调整Hive表存储路径的权限,确保Driver运行用户拥有读写执行权限,可使用hdfs dfs -chmod -R 755 <表路径>(根据实际需求调整权限)。
  • 规范写入逻辑:采用Spark标准API写入Hive表,如DataFrame.write.saveAsTable()或CREATE TABLE ... AS SELECT语法,避免自定义文件写入逻辑绕过Spark的提交协议。
  • 升级Spark版本:Spark 3.1.3存在部分已知的临时目录未删除bug(如动态分区写入场景),升级至3.2.x及以上版本可修复此类问题。
  • 重置提交协议配置:若自定义了提交协议,可恢复为默认配置:
    spark.sql.sources.commitProtocolClass=org.apache.spark.sql.execution.datasources.SQLHadoopMapReduceCommitProtocol
    

内容的提问来源于stack exchange,提问作者Eyal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 00:26:16