2016-08-05 9 views
3

Ich bin neu im Map-Reduce-Framework. Ich möchte die Anzahl der Dateien in einem bestimmten Verzeichnis herausfinden, indem ich den Namen dieses Verzeichnisses zur Verfügung stelle. z.B. Nehmen wir an, wir haben 3 Verzeichnisse A, B, C und jedes hat 20, 30, 40 Teil-R-Dateien. Also ich bin daran interessiert, einen hadoop Job zu schreiben, die Dateien/Datensätze in jedem Verzeichnis zählt also ich unten formatierte TXT-Datei eine Ausgabe will:Wie zähle ich die Anzahl der Dateien in einem bestimmten Verzeichnis in hadoop?

A ist mit 20 Aufzeichnungen

B 30 Datensätze ist mit

C wird mit 40 Platten

Diese alle Verzeichnisse vorhanden sind in HDFS.

+0

warum wollen Sie es, einen Job zu erstellen, können Sie nicht einfach für sie ein Java-Programm schreiben? – ViKiG

+1

Einfache Version: 'hadoop fs -ls/dir | grep part-0 * | wc -l' –

Antwort

1

Die einfachste/native Ansatz ist in hdfs Befehle verwenden gebaut, in diesem Fall -count:

hdfs dfs -count /path/to/your/dir >> output.txt 

Oder wenn Sie es vorziehen, einen gemischten Ansatz über Linux-Befehle:

hadoop fs -ls /path/to/your/dir/* | wc -l >> output.txt 

Schließlich wird die MapReduce Version wurde bereits hier beantwortet:

How do I count the number of files in HDFS from an MR job?

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(); 
} 
System.out.println("The count is: " + count); 
Verwandte Themen