我想在HDFS目录中找到文件的最大大小。有谁知道如何找到它?我在Hadoop 2.6.0。
我发现hadoop fs -ls -S /url
可以Sort output by file size
来自Hadoop 2.7.0 document,但2.6.0不支持。那么是否有任何类似的功能可以按大小对输出文件进行排序?谢谢!
答案 0 :(得分:1)
您可以使用hdfs fsck
命令获取文件大小。
例如,当我执行hdfs fsck /tmp/ -files
时,我得到以下输出:
/tmp <dir>
/tmp/100GB <dir>
/tmp/100GB/Try <dir>
/tmp/100GB/Try/1.txt 5 bytes, 1 block(s): OK
/tmp/100GB/_SUCCESS 0 bytes, 0 block(s): OK
/tmp/100GB/part-m-00000 107374182400 bytes, 800 block(s): OK
/tmp/100GB/part-m-00001._COPYING_ 44163923968 bytes, 330 block(s):
/tmp/10GB <dir>
/tmp/10GB/_SUCCESS 0 bytes, 0 block(s): OK
/tmp/10GB/part-m-00000 10737418300 bytes, 81 block(s): OK
/tmp/1GB <dir>
/tmp/1GB/_SUCCESS 0 bytes, 0 block(s): OK
/tmp/1GB/part-m-00000 1073741900 bytes, 9 block(s): OK
/tmp/1GB/part-m-00001 1073741900 bytes, 9 block(s): OK
以递归方式列出/tmp
下的所有文件及其大小。
现在,要解析具有最大大小的文件,您可以执行以下命令:
hdfs fsck /tmp/ -files | grep "/tmp/" | grep -v "<dir>" | gawk '{print $2, $1;}' | sort -n
此命令执行以下操作:
hdfs fsck /tmp/ -files
- 它对文件夹/tmp/
运行HDFS文件系统检查,并为/tmp/
grep "/tmp/"
- 它为/tmp/
(我们要搜索的文件夹)的greps。这将只提供/tmp/
"grep -v "<dir>""
- 这会从输出中删除目录(因为我们只需要文件)gawk '{print $2, $1;}'
- 打印文件大小($ 2),后跟文件名($ 1)sort -n
- 这是对文件大小进行数字排序,列表中的最后一个文件应该是最大的文件您可以将输出通过管道传输到tail -1
以获取最大的文件。
例如我输出为:
107374182400 /tmp/100GB/part-m-00000
答案 1 :(得分:0)
试一试,找出哪个是最大hdfs dfs -ls -h /path | sort -r -n -k 5
答案 2 :(得分:0)
请尝试以下命令。
hadoop fs -du
Folder
| sort -n -r |头-n 1