用hadoop fs mv覆盖目标?

kokeuurv  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(1444)

快速测试表单

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> 对我来说会更方便吗?

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

bzzcjhmw

bzzcjhmw1#

我认为没有直接的选项可以将文件从一个hdfs位置移动和覆盖到另一个hdfs位置,尽管复制(cp命令)有强制的选项(使用-f)。来自apache hadoop文档(https://hadoop.apache.org/docs/r1.2.1/hdfs_design.html),据说hadoop是采用一次写多读的模式设计的,这种模式限制了重写。

相关问题