2012-07-20 252 views

Respuesta

17

Puede usar el comando hadoop fs -ls para listar los archivos en el directorio actual, así como sus detalles. La quinta columna en el resultado del comando contiene tamaño de archivo en bytes.

Por ej. hadoop fs -ls input comando da salida siguiente:

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

El tamaño del archivo de sou es 45956 bytes.

+0

¿Cómo generaría el tamaño en la forma legible para humanos? -l - lah no funciona aquí –

27

También me encuentro usando hadoop fs -dus <path> una gran oferta. Por ejemplo, si un directorio en HDFS denomina "/ usuario/Frylock/entrada" contiene 100 archivos y necesitas el tamaño total de todos esos archivos podría ejecutar:

hadoop fs -dus /user/frylock/input 

y se podrían obtener de vuelta el tamaño total (en bytes) de todos los archivos en el directorio "/ usuario/frylock/input".

Además, tenga en cuenta que HDFS almacena datos de forma redundante, por lo que el almacenamiento físico real utilizado por un archivo puede ser 3 veces mayor que hadoop fs -ls y hadoop fs -dus.

+0

Además del último punto: el factor de replicación es el número que se muestra después de los indicadores de permisos y antes del propietario (segunda columna en la respuesta de @adhunavkulkarni) –

+3

hadoop fs -du -s para más reciente versiones – serhanbaker

+17

Use 'hadoop fs -du -s -h/user/frylock/input' para una salida mucho más legible. – axiom

2

Si desea hacerlo a través de la API, puede utilizar el método 'getFileStatus()'.

+0

No está bien, no devuelve el tamaño de archivo, devuelve el tamaño de bloque asignado que no será cero para los archivos vacíos. El valor predeterminado es 67108864. – user1613360

10

Utilicé la siguiente función que me ayudó a obtener el tamaño del archivo.

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

¿Puede decirme si esto devuelve 7906 y cuál es el tamaño de ese directorio? Es en bytes o en kbs? – retiremonk

4

Véase el siguiente comando con la escritura awk para ver el tamaño (en GB) de salida filtrada en HDFS:

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

de salida ---> 2.089GB

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

de salida ---> 1.724 GB

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

salida ---> 0.986GB

Cuestiones relacionadas