2016-08-09 3 views
3

Wie finde ich die Anzahl der Unterverzeichnisse in einem angegebenen Verzeichnis in HDFS?Anzahl der Unterverzeichnisse in einem Verzeichnis?


Wenn ich hadoop fs -ls /mydir/ tun, erhalte ich eine Java Heap-Speicher-Fehler, da das Verzeichnis zu groß ist, aber was mich interessiert ist die Anzahl der Unterverzeichnisse in diesem Verzeichnis. Ich habe versucht:

[email protected] ~]$ hadoop fs -find /mydir/ -maxdepth 1 -type d -print| wc -l 
find: Unexpected argument: -maxdepth 
0 

Ich weiß, dass das Verzeichnis nicht leer ist, also 0 ist nicht korrekt:

[[email protected] ~]$ hadoop fs -du -s -h /mydir 
737.5 G /mydir 
+0

ich verstehe nicht, wie ein 'ls' Befehl, um einen Heap-Speicher Fehler verursachen würde. Es sollte nur Verzeichnisse auflisten. –

+0

Und ich denke nur der Pfad und der Ausdruck sind gültig für die ['-Finde] (http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/FileSystemShell.html #find) Befehl, deshalb hast du 0 - Du hast einen Fehler. –

+0

Ähnliche Fragen für Dateien hier http://stackoverflow.com/questions/11342400/how-to-list-all-files-in-a-directory-and-its-subdirectories-in-hadoop-hdfs#11345280 und hier http : //stackoverflow.com/questions/37903445/how-to-enumerate-files-in-hdfs-directory? rq = 1 –

Antwort

1

Der Befehl zum Gebrauch ist: hdfs dfs -ls -R /path/to/mydir/ | grep "^d" | wc -l

Aber das wird Ihnen auch geben der Fehler java.lang.OutOfMemoryError: Java heap space. Um den Fehler zu vermeiden, müssen Sie den Java-Heap-Speicher zu erhöhen und den gleichen Befehl wie ausführen:

export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Xmx5g" und dann

hdfs dfs -ls -R /path/to/mydir/ | grep "^d" | wc -l ..... # Für alle Unterverzeichnisse

OR

hdfs dfs -ls /path/to/mydir/ | grep "^d" | wc -l ..... # Für maxdepth = 1

Verwandte Themen