web-dev-qa-db-fra.com

Nombre de fichiers dans un répertoire HDFS

Dans Java code, je veux me connecter à un répertoire dans HDFS, connaître le nombre de fichiers dans ce répertoire, obtenir leurs noms et vouloir les lire. Je peux déjà lire les fichiers mais je ne pouvais pas 't comprendre comment compter les fichiers dans un répertoire et obtenir des noms de fichiers comme un répertoire ordinaire.

Pour lire, j'utilise DFSClient et j'ouvre des fichiers dans InputStream.

21
user1125953

nombre

Usage: hadoop fs -count [-q] <paths>

Comptez le nombre de répertoires, fichiers et octets sous les chemins d'accès qui correspondent au modèle de fichier spécifié. Les colonnes de sortie sont: DIR_COUNT, FILE_COUNT, CONTENT_SIZE FILE_NAME.

Les colonnes de sortie avec -q sont: QUOTA, REMAINING_QUATA, SPACE_QUOTA, REMAINING_SPACE_QUOTA, DIR_COUNT, FILE_COUNT, CONTENT_SIZE, FILE_NAME.

Exemple:

hadoop fs -count hdfs://nn1.example.com/file1 hdfs://nn2.example.com/file2
hadoop fs -count -q hdfs://nn1.example.com/file1

Code de sortie:

Renvoie 0 en cas de succès et -1 en cas d'erreur.

Vous pouvez simplement utiliser le FileSystem et parcourir les fichiers à l'intérieur du chemin. Voici un exemple de code

int count = 0;
FileSystem fs = FileSystem.get(getConf());
boolean recursive = false;
RemoteIterator<LocatedFileStatus> ri = fs.listFiles(new Path("hdfs://my/path"), recursive);
while (ri.hasNext()){
    count++;
    ri.next();
}
33
user2486495
FileSystem fs = FileSystem.get(conf);
Path pt = new Path("/path");
ContentSummary cs = fs.getContentSummary(pt);
long fileCount = cs.getFileCount();
12
user1125953

Pour faire un décompte rapide et simple, vous pouvez également essayer le one-liner suivant:

hdfs dfs -ls -R /path/to/your/directory/ | grep -E '^-' | wc -l

Explication rapide:

grep -E '^-' ou egrep '^-': Grep tous les fichiers: les fichiers commencent par '-' tandis que les dossiers commencent par 'd';

wc -l: nombre de lignes.

12
Eric

En ligne de commande, vous pouvez le faire comme ci-dessous.

 hdfs dfs -ls $parentdirectory | awk '{system("hdfs dfs -count " $6) }'
2
Akarsh

hadoop fs -du [-s] [-h] [-x] URI [URI ...]

Affiche la taille des fichiers et des répertoires contenus dans le répertoire donné ou la longueur d'un fichier au cas où ce serait juste un fichier.

Options:

The -s option will result in an aggregate summary of file lengths being displayed, rather than the individual files. Without the -s option, calculation is done by going 1-level deep from the given path.
The -h option will format file sizes in a “human-readable” fashion (e.g 64.0m instead of 67108864)
The -x option will exclude snapshots from the result calculation. Without the -x option (default), the result is always calculated from all INodes, including all snapshots under the given path.
0
Suraj Nagare