用hadoop fs mv覆盖目的地?

时间:2018-05-22 00:54:09

标签: 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()

产生输出

... during second function call
mv: '/tmp/test001.txt': File exists
# file: /tmp/test001.txt
trusted.testfield="<old timestamp from first call>"
...

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

**顺便说一下,如果我错误地解释结果或者行为似乎不正确,请告诉我(因为我认为覆盖是默认行为并且正在写这个问题因为我很惊讶它似乎不是。)

1 个答案:

答案 0 :(得分:1)

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