如何查找HDFS文件的大小?应使用什么命令来查找HDFS中任何文件的大小。
答案 0 :(得分:31)
我也发现自己使用hadoop fs -dus <path>
很多。例如,如果名为“/ user / frylock / input”的HDFS上的目录包含100个文件,并且您需要运行所有这些文件的总大小:
hadoop fs -dus /user/frylock/input
然后你会得到“/ user / frylock / input”目录中所有文件的总大小(以字节为单位)。
另外,请记住,HDFS会冗余存储数据,因此文件使用的实际物理存储空间可能是hadoop fs -ls
和hadoop fs -dus
报告的实际物理存储空间的3倍或更多。
答案 1 :(得分:18)
您可以使用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字节。
答案 2 :(得分:11)
我使用了以下功能帮助我获取文件大小。
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;
}
}
答案 3 :(得分:7)
使用awk脚本查看下面的命令,以查看HDFS中过滤输出的大小(以GB为单位):
hadoop fs -du -s /data/ClientDataNew/**A*** | awk '{s+=$1} END {printf "%.3fGB\n", s/1000000000}'
输出---&gt; 2.089GB
hadoop fs -du -s /data/ClientDataNew/**B*** | awk '{s+=$1} END {printf "%.3fG\n", s/1000000000}'
输出---&gt; 1.724GB
hadoop fs -du -s /data/ClientDataNew/**C*** | awk '{s+=$1} END {printf "%.3fG\n", s/1000000000}'
输出---&gt; 0.986GB
答案 4 :(得分:2)
如果您想通过API执行此操作,可以使用'getFileStatus()'方法。
答案 5 :(得分:1)
hdfs dfs -du -s -h /directory
这是人类可读的版本,否则会给出错误的单位(稍大)