2012-07-20 59 views

回答

17

您可以使用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個字節。

+0

你將如何輸出的大小在人類可讀的形式? -ls - lah在這裏不起作用 – 2017-11-07 13:21:14

27

我也發現自己使用hadoop fs -dus <path>很多。例如,如果在名爲HDFS「/用戶/ frylock /輸入」目錄中包含100個文件,你需要爲所有這些文件的總大小,你可以運行:

hadoop fs -dus /user/frylock/input 

,你還是會回到總規模(以字節爲單位)「/ user/frylock/input」目錄中的所有文件。

另請注意,HDFS冗餘存儲數據,因此文件使用的實際物理存儲量可能是hadoop fs -lshadoop fs -dus報告的3倍或更多。

+0

除了最後一點 - 複製因子是在權限標誌之後和所有者之前顯示的數字(@ adhunavkulkarni的答案中的第2列) – 2012-07-20 10:39:43

+3

hadoop fs -du -s for newer版本 – serhanbaker 2013-11-30 16:51:23

+17

使用'Hadoop的FS -du -s -h /用戶/ frylock/input'一個更加可讀的輸出。 – axiom 2015-12-11 23:23:03

2

如果你想通過API來實現,你可以使用'getFileStatus()'方法。

+0

這是不正確的,它不返回文件大小它返回分配的塊大小,它不會爲零的空文件。默認是67108864. – user1613360 2014-11-30 06:23:33

10

我用下面的函數幫助我獲得文件大小。

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; 
    } 
} 
+0

請問如果這返回7906那麼該目錄的大小是多少?它是以字節還是以kbs爲單位? – retiremonk 2016-01-27 15:54:41

4

查看命令下面awk腳本看到濾波的輸出的大小(在GB)在HDFS:

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

相關問題