如何在hdfs目录中查找最大文件大小

时间:2015-12-30 19:39:14

标签: command hdfs

我想在HDFS目录中找到文件的最大大小。有谁知道如何找到它?我在Hadoop 2.6.0。

我发现hadoop fs -ls -S /url可以Sort output by file size来自Hadoop 2.7.0 document,但2.6.0不支持。那么是否有任何类似的功能可以按大小对输出文件进行排序?谢谢!

3 个答案:

答案 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