用hadoop fs mv覆盖目的地?

lam*_*ter 5 hadoop hadoop2

对表格进行快速测试

testfunc() {
    hadoop fs -rm /test001.txt
    hadoop fs -touchz /test001.txt
    hadoop fs -setfattr -n trusted.testfield -v $(date +"%T") /test001.txt
    hadoop fs -mv /test001.txt /tmp/.
    hadoop fs -getfattr -d /tmp/test001.txt
}
testfunc()
testfunc()
Run Code Online (Sandbox Code Playgroud)

导致输出

... during second function call
mv: '/tmp/test001.txt': File exists
# file: /tmp/test001.txt
trusted.testfield="<old timestamp from first call>"
...
Run Code Online (Sandbox Code Playgroud)

似乎(与在 linux 中不同)该hadoop fs mv命令不会覆盖目标文件(如果已存在)。有没有办法强制覆盖行为(我想我每次都可以检查和删除目的地,但hadoop mv -overwrite <source> <dest>对于我的目的来说更方便)?

** 顺便说一句,如果我对结果的解释不正确,或者行为似乎不正确,请告诉我(因为我认为覆盖是默认行为,我正在写这个问题,因为我很惊讶它似乎不是) .

小智 4

我认为没有直接的选项可以将文件从一个 HDFS 位置移动和覆盖到另一个位置,尽管复制(cp 命令)可以选择强制(使用 -f)。从Apache Hadoop文档(https://hadoop.apache.org/docs/r1.2.1/hdfs_design.html)来看,Hadoop被设计为使用一次写入多次读取模型,该模型限制了覆盖。