web-dev-qa-db-fra.com

Comment trouver la taille d'un fichier HDFS

Comment trouver la taille d'un fichier HDFS? Quelle commande doit être utilisée pour trouver la taille d’un fichier dans HDFS.

25
priya

Vous pouvez utiliser la commande hadoop fs -ls pour répertorier les fichiers du répertoire en cours, ainsi que leurs détails. La cinquième colonne de la sortie de la commande contient la taille du fichier en octets.

Par exemple La commande hadoop fs -ls input donne le résultat suivant:

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

La taille du fichier sou est de 45956 octets.

17
abhinavkulkarni

Je me retrouve aussi beaucoup en utilisant hadoop fs -dus <path>. Par exemple, si un répertoire sur HDFS nommé "/ user/frylock/input" contient 100 fichiers et que vous avez besoin de la taille totale de tous ces fichiers, vous pouvez exécuter:

hadoop fs -dus /user/frylock/input

et vous obtiendrez la taille totale (en octets) de tous les fichiers du répertoire "/ user/frylock/input". 

N'oubliez pas non plus que HDFS stocke les données de manière redondante, de sorte que le stockage physique réellement utilisé par un fichier peut être au moins 3 fois supérieur à celui indiqué par hadoop fs -ls et hadoop fs -dus.

29
Paul M

J'ai utilisé la fonction ci-dessous qui m'a aidé à obtenir la taille du fichier.

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;
    }
}
11
user3315248

Voir la commande ci-dessous avec le script awk pour voir la taille (en Go) de la sortie filtrée dans HDFS:

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

sortie ---> 2.089GB

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

sortie ---> 1.724GB

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

sortie ---> 0.986GB

7
Eddy Joseph

Si vous voulez le faire via l'API, vous pouvez utiliser la méthode 'getFileStatus ()'.

2
Tariq
hdfs dfs -du -s -h /directory

Ceci est la version lisible par l’homme, sinon elle donnera de mauvaises unités (légèrement plus grande)

0
Jason