2012-07-20 15 views

Antwort

17

Sie können den Befehl hadoop fs -ls verwenden, um Dateien im aktuellen Verzeichnis sowie deren Details aufzulisten. Die 5. Spalte in der Befehlsausgabe enthält die Dateigröße in Bytes.

Für z.B. Befehl hadoop fs -ls input gibt folgende Ausgabe:

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

Die Größe der Datei sou 45.956 Bytes.

+0

Wie würden Sie die Größe in der vom Menschen lesbaren Form ausgeben? -ls - lah funktioniert hier nicht –

27

Ich finde mich auch mit hadoop fs -dus <path> sehr viel. wenn ein Verzeichnis auf HDFS zum Beispiel den Namen „/ user/Frylock/Eingabe“ 100 Dateien enthält, und Sie müssen die Gesamtgröße für alle diese Dateien könnten Sie laufen:

hadoop fs -dus /user/frylock/input 

und Sie würden die Gesamtgröße zurück (in Byte) aller Dateien im Verzeichnis "/ user/frylock/input".

Denken Sie auch daran, dass HDFS Daten redundant speichert, sodass der tatsächlich von einer Datei belegte physische Speicher 3x oder mehr sein kann, als von hadoop fs -ls und hadoop fs -dus gemeldet wird.

+0

Zusätzlich zu dem letzten Punkt - der Replikationsfaktor ist die Nummer nach den Genehmigungsflags angezeigt, und vor dem Besitzer (2. Spalte in @ adhunavkulkarni's Antwort) –

+3

hadoop fs -du -s für neuere Versionen – serhanbaker

+17

Verwenden Sie 'hadoop fs -du -s -h/Benutzer/frylock/Eingabe' für eine viel lesbarere Ausgabe. – axiom

2

Wenn Sie dies über die API tun möchten, können Sie die Methode 'getFileStatus()' verwenden.

+0

Es ist nicht richtig, es gibt keine Dateigröße zurück es zugewiesene Blockgröße, die für leere Dateien nicht Null sein wird. Der Standardwert ist 67108864. – user1613360

10

Ich benutzte die folgende Funktion, die mir half, die Dateigröße zu bekommen.

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

Können Sie mir bitte sagen, wenn dies 7906 zurückgibt, was ist dann die Größe dieses Verzeichnisses? Ist es in Bytes oder in Kbs? – retiremonk

4

Siehe den Befehl unten mit awk Skript die Größe (in GB) der gefilterten Ausgabe in HDFS zu sehen:

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

Ausgang ---> 2.089GB

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

Ausgang ---> 1.724GB

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

Ausgabe ---> 0.986GB

Verwandte Themen