2016-11-21 94 views
4

我正在寻找hadoop 2.x中的命令来删除hdfs中零字节的文件。 任何人都可以让我知道适当的命令。 我正在尝试在hdfs中查找零字节的文件,并将它们从目录中删除。hadoop删除零文件的文件

回答

4
for f in $(hdfs dfs -ls -R/| awk '$1 !~ /^d/ && $5 == "0" { print $8 }'); do hdfs dfs -rm "$f"; done 

循序渐进:

hdfs dfs -ls -R / - 列出HDFS中的所有文件递归

awk '$1 !~ /^d/ && $5 == "0" { print $8 }') - 打印是不是目录,并用大小为0

for f in $(...); do hdfs dfs -rm "$f"; done那些完整路径 - 反复删除

2

建立在Kombajn的答案,如果你有很多文件删除它将是qui cker使用xargs。这将允许您删除多个文件,每个hdfs命令,这是相当昂贵的。

hdfs dfs -ls -R/| awk '$1 !~ /^d/ && $5 == "0" { print $8 }' | xargs -n100 hdfs dfs -rm 
+0

你介意解释这里使用的awk脚本吗? – ylabidi

+1

@ylabidi展开Kombajn描述的内容,他打印来自'ls'的行不是以'd'(目录)开头,并且第5个字段(大小)不为0的行的字段8(文件名) – highlycaffeinated