35

如何查找 HDFS 文件的大小?应该使用什么命令来查找 HDFS 中任何文件的大小。

4

7 回答 7

33

我也发现自己使用hadoop fs -dus <path>了很多。例如,如果 HDFS 上名为“/user/frylock/input”的目录包含 100 个文件,并且您需要所有可以运行的文件的总大小:

hadoop fs -dus /user/frylock/input

您将获得“/user/frylock/input”目录中所有文件的总大小(以字节为单位)。

hadoop fs -ls此外,请记住,HDFS 以冗余方式存储数据,因此文件使用的实际物理存储可能是and报告的 3 倍或更多hadoop fs -dus

于 2012-07-20T10:25:10.440 回答
22

您可以使用hadoop fs -ls命令列出当前目录中的文件及其详细信息。命令输出中的第 5 列包含文件大小(以字节为单位)。

例如,命令hadoop fs -ls input给出以下输出:

Found 1 items
-rw-r--r--   1 hduser supergroup      45956 2012-07-19 20:57 /user/hduser/input/sou

文件大小sou为 45956 字节。

于 2012-07-20T08:12:30.370 回答
15

我使用了以下函数来帮助我获取文件大小。

public class GetflStatus
{
    public long getflSize(String args) throws IOException, FileNotFoundException
    {
        Configuration config = new Configuration();
        Path path = new Path(args);
        FileSystem hdfs = path.getFileSystem(config);
        ContentSummary cSummary = hdfs.getContentSummary(path);
        long length = cSummary.getLength();
        return length;
    }
}
于 2014-03-18T16:31:24.417 回答
9

使用 awk 脚本查看以下命令以查看 HDFS 中过滤输出的大小(以 GB 为单位):

hadoop fs -du -s /data/ClientDataNew/**A***  | awk '{s+=$1} END {printf "%.3fGB\n", s/1000000000}'

输出---> 2.089GB

hadoop fs -du -s /data/ClientDataNew/**B***  | awk '{s+=$1} END {printf "%.3fG\n", s/1000000000}'

输出---> 1.724GB

hadoop fs -du -s /data/ClientDataNew/**C***  | awk '{s+=$1} END {printf  "%.3fG\n", s/1000000000}'

输出---> 0.986GB

于 2016-05-10T14:44:59.083 回答
4
hdfs dfs -du -s -h /directory

这是人类可读的版本,否则它会给出错误的单位(略大)

于 2019-02-05T19:31:00.833 回答
2

如果你想通过 API 来做,你可以使用 'getFileStatus()' 方法。

于 2012-07-20T12:13:59.140 回答
0

如果您想知道目录中每个文件的大小,请在末尾使用“*”星号。

hadoop fs -du -s -h /tmp/output/*

我希望这有助于你的目的。

于 2021-08-31T08:52:04.310 回答