Hadoop fs mv命令是否支持强制覆盖已存在的目标文件?
Hadoop
fs mv 不覆盖目标文件的解决方案 首先要确认你的测试结果完全正确——HDFS的mv命令确实默认不会覆盖已存在的目标文件,这和Linux本地的mv行为差异很大,你的意外是合理的,毕竟本地系统的操作直觉在这里并不适用。HDFS的这个设计是出于分布式数据安全考量,避免误操作导致重要数据丢失。
关于你想要的“强制覆盖”方式,目前Hadoop原生的hadoop fs mv并没有类似-overwrite的直接参数,不过有几个实用的替代方案可以实现类似效果:
先删除目标再移动(最常用的简便方式)
你可以把删除和移动命令整合在一行,用&&保证只有删除成功(或目标文件不存在)时才执行移动操作:hadoop fs -rm -f /tmp/test001.txt && hadoop fs -mv /test001.txt /tmp/其中
-f参数会忽略目标文件不存在的情况,避免命令因报错中断。使用
distcp命令实现覆盖distcp原本是用于跨集群的数据复制工具,但它支持-overwrite参数,也可以用来实现单文件的覆盖式移动(本质是复制后自动删除源文件):hadoop distcp -overwrite /test001.txt /tmp/test001.txt注意这里目标要指定完整的文件名,否则
distcp会把源文件放到目标目录下,而非覆盖同名文件。
另外补充一点:你测试中发现第二次调用mv失败后,目标文件的扩展属性还是第一次的时间戳,这完全符合预期——因为mv执行失败,源文件根本没移动过去,目标文件始终是第一次操作生成的那个。
内容的提问来源于stack exchange,提问作者lampShadesDrifter
相关产品推荐
相关产品推荐

