2012-07-20 12 views

risposta

17

È possibile utilizzare il comando hadoop fs -ls per elencare i file nella directory corrente e i relativi dettagli. La quinta colonna nell'output del comando contiene la dimensione del file in byte.

Ad es. comando hadoop fs -ls input dà uscita seguente:

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

La dimensione del file è sou 45956 byte.

+0

Come si può visualizzare la dimensione nella forma leggibile dall'uomo? -ls - lah non funziona qui –

27

Mi trovo anch'io ad usare lo hadoop fs -dus <path> un ottimo affare. Ad esempio, se una directory su HDFS denominati "/ user/Frylock/ingresso" contiene 100 file ed è necessario la dimensione totale per tutti i file è possibile eseguire:

hadoop fs -dus /user/frylock/input 

e si dovrebbe tornare la dimensione totale (in byte) di tutti i file nella directory "/ user/frylock/input".

Inoltre, tenere presente che HDFS memorizza i dati in modo ridondante in modo che la memoria fisica effettiva utilizzata da un file possa essere 3x o superiore a quanto riportato da hadoop fs -ls e hadoop fs -dus.

+0

Oltre all'ultimo punto - il fattore di replica è il numero mostrato dopo i flag di autorizzazione e prima del proprietario (seconda colonna nella risposta di @ adhunavkulkarni) –

+3

hadoop fs -du -s per i più recenti versioni – serhanbaker

+17

Utilizzare 'hadoop fs -du -s -h/user/frylock/input' per un output molto più leggibile. – axiom

2

Se si desidera eseguire l'API, è possibile utilizzare il metodo 'getFileStatus()'.

+0

Non va bene non restituisce la dimensione del file restituisce la dimensione del blocco allocata che non sarà zero per i file vuoti. Il valore predefinito è 67108864. – user1613360

10

Ho utilizzato la funzione seguente che mi ha aiutato a ottenere le dimensioni del file.

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

Puoi dirmi se questo restituisce 7906, allora qual è la dimensione di quella directory? È in byte o in kbs? – retiremonk

4

vedere il comando sottostante con script awk per visualizzare la dimensione (in GB) di uscita filtrato in HDFS:

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

uscita ---> 2.089GB

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

uscita ---> 1.724GB

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

uscita ---> 0.986GB

Problemi correlati