Comment trouver la taille d'un fichier HDFS? Quelle commande doit être utilisée pour trouver la taille d’un fichier dans HDFS.
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.
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
.
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;
}
}
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
Si vous voulez le faire via l'API, vous pouvez utiliser la méthode 'getFileStatus ()'.
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)