统计hdfs中压缩文件的个数

Counting the number of compressed files in hdfs

我正在尝试计算 Hdfs 文件夹中压缩的文件。 我正在使用 hdfs dfs -count /user/data | grep .snappy——什么都不显示 grep.snappy | hdfs dfs -count /user/data --显示所有文件(即使不是.snappy)

我能否获得正确的命令来计算此 /user/data hdfs 路径中的 .snappy 文件

hdfs dfs -count 命令给出以下信息:

  • 目录数
  • 文件数
  • 内容大小
  • 文件名

例如,我在 /tmp/ 文件夹中得到以下输出:

CMD> hdfs dfs -count  /tmp/
    14           33       193414280395 /tmp

使用此命令,您无法像这样获取 .snappy 个文件的计数:

CMD> hdfs dfs -count -v /tmp/*.snappy

你会得到这样的输出:

DIR_COUNT   FILE_COUNT       CONTENT_SIZE PATHNAME
       0            1               4623 /tmp/Links.txt.snappy
       0            1             190939 /tmp/inclusions_00000005.snappy

要获取.snappy个文件的个数,也可以执行以下命令:

  • 获取文件夹下.snappy个文件的数量:

    只需执行hadoop fs -ls命令。例如要获取 /user/data 文件夹下的 .snappy 个文件的数量,只需执行:

    hadoop fs -ls /user/data/*.snappy | wc -l
    
  • 递归获取文件夹下所有.snappy个文件的数量:

    执行hadoop fsck命令。例如:

    hadoop fsck /user/data/ -files | grep ".snappy" | wc -l
    

编辑:所有大于 30 MB 的文件 如果要查找所有大于等于30MB(30 *1024 * 1024 = 31457280)的文件,需要执行以下命令:

hadoop fsck /user/data -files | grep ".snappy" | gawk '{if ( ~ /^[0-9]+$/ && >=31457280) print ,;}'

这将打印 $1 作为文件名,$2 作为文件大小。

如果您想要文件的数量,只需将其通过管道传输到 wc -l,如下所示:

hadoop fsck /user/data -files | grep ".snappy" | gawk '{if ( ~ /^[0-9]+$/ && >=31457280) print ,;}' | wc -l