In meinem Job muss ich viele historische Logsets analysieren. Einzelne Kunden (es gibt Tausende) möglicherweise Hunderte von Protokollunterverzeichnissen nach Datum ausgebrochen. Zum Beispiel:Pass Verzeichnisse nicht Dateien zu hadoop-streaming?
- logs/Customer_One/2011-01-02-001
- logs/Customer_One/2012-02-03-001
- logs/Customer_One/2012-02-03-002
- logs/Customer_Two/2009-03-03-001
- logs/Customer_Two/2009-03-03-002
Jeder einzelne Protokollsatz kann sich fünf oder sechs Ebenen tief sein und tausende von Dateien enthalten.
Daher möchte ich eigentlich die einzelnen Map-Jobs zu Fuß die Unterverzeichnisse behandeln: einfach die Aufzählung einzelner Dateien ist Teil meines verteilten Computerproblems!
Leider, wenn ich versuche, ein Verzeichnis mit nur Log-Unterverzeichnissen an Hadoop zu übergeben, beschwert es sich, dass ich diese Unterverzeichnisse nicht an meine Mapper übergeben kann. (Auch hier habe ich geschrieben Verzeichnisse als Eingabe zu akzeptieren):
$ hadoop jar "${HADOOP_HOME}/contrib/streaming/hadoop-streaming-${HADOOP_VERSION}.jar" -input file:///mnt/logs/Customer_Name/ -file mapper.sh -mapper "mapper.sh" -file reducer.sh -reducer "reducer.sh" -output .
[ . . . ]
12/04/10 12:48:35 ERROR security.UserGroupInformation: PriviledgedActionException as:cloudera (auth:SIMPLE) cause:java.io.IOException: Not a file: file:/mnt/logs/Customer_Name/2011-05-20-003 12/04/10 12:48:35 ERROR streaming.StreamJob: Error Launching job : Not a file: file:/mnt/logs/Customer_Name/2011-05-20-003 Streaming Command Failed! [[email protected] ~]$
Gibt es eine einfache Möglichkeit, Hadoop-Streaming zu überzeugen, mir zu erlauben, Verzeichnisse als Arbeitselemente zuweisen?
wildcarding/globs sollte funktionieren, versuchen '-input file: /// mnt/logs/Kunde _ */**/*. Log' –
Globbing ist nicht die Antwort: Erstens würde es nur Dateien zu einem gegebenen finden level im Verzeichnisbaum und nicht mehrere Ebenen; Zweitens, wie ich ursprünglich beschrieben habe, ist die Anzahl der Verzeichnisse und Unterverzeichnisse enorm (tatsächlich weit über die Grenzen einer Shell hinaus, um ohne Xargs zu expandieren), und die Zeit, diesen Baum zu durchlaufen, ist genau ein Teil des Problems, das ich verteilen möchte. (Die Durchführung des Globbing, von dem du sprichst, würde Tage dauern, buchstäblich mit 1 ms Rt.) –
Für einen Moment erinnerte ich mich daran, dass Hadoop rekursive Klumpen mit der Doppelstern-Notation unterstützt, aber ein schneller Test in meiner Konsole steht sonst –