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

跨集群拷贝Hive分区表出现带.tmp后缀分区及多余分区问题咨询

问题根因分析

带.tmp~!@后缀路径的产生原因

  • distcp执行过程中会默认在目标路径下生成带.tmp前缀加随机后缀的临时目录,用于存储未完成拷贝的文件块,任务执行成功后会自动将临时目录重命名为正式目录,若任务因网络波动、集群资源不足、超时被kill等异常中断,临时目录会直接残留在目标路径下,不会被自动清理。
  • 若distcp执行时,原集群刚好在对该Hive表做分区写入、修改操作,原集群侧的临时写入文件(Hive写入时默认生成./_开头的临时目录)也会被distcp全量扫描拷贝到目标集群,产生异常后缀路径。
  • 你未配置定时任务的前置清理、后置校验逻辑,多次执行的残留临时文件会不断累积,甚至被后续distcp任务当成合法路径重复拷贝。

原集群不存在的异常分区产生原因

  • Hive会自动扫描表存储路径下所有符合分区键=分区值命名规则的目录,若残留的临时目录刚好匹配该格式(如dt=20240601.tmp~!@),即使你未执行msck repair table,若开启了hive.metastore.partition.inference.enabled配置(Hive 3.x及以上版本默认开启),这些异常目录会被自动识别成分区加载到元数据,形成原集群不存在的分区。
  • 若你的distcp命令使用了-update/-overwrite增量同步参数,但未搭配-delete参数,目标集群中已经存在、但原集群已经删除的旧分区不会被清理,长期累积就会出现大量原集群不存在的冗余分区。
规避方案
  • 执行distcp时添加过滤规则,跳过所有./_开头的隐藏临时路径,命令示例:distcp -filters <(echo -e "regex .*/\\..*$\nregex .*/_.*$") hdfs://源集群路径 hdfs://目标集群路径
  • 定时任务增加执行结果校验,仅在distcp返回成功状态后,执行目标路径下临时目录的清理操作,删除所有带.tmp后缀的异常路径。
  • 若需要保证目标集群和原集群表数据完全一致,distcp添加-delete参数,自动删除目标路径中源集群不存在的冗余文件/目录。
  • 定期执行msck repair table <表名> drop partitions清理元数据中已不存在的异常分区。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:54:04