Hadoop Streaming ist ein Dienstprogramm, mit dem Hadoop-Distribution kommt. Dieses Dienstprogramm erlaubt Ihnen, erstellen und ausführen Map / Reduce Arbeitsplätze mit jeder ausführbaren Datei oder Skript als Mapper und / oder der Minderer.
Für Hadoop Streaming, denken wir über das Wort-Zählung Problem. Jeder Job in Hadoop müssen zwei Phasen: Mapper und Minderer. Wir haben Codes für die Mapper geschrieben und die Minderer in Python-Skript zu ausgeführt es unter Hadoop. Eine kann auch das gleiche zu schreiben in Perl und Ruby.
!/usr/bin/python import sys # Input takes from standard input for myline in sys.stdin: # Remove whitespace either side myline = myline.strip() # Break the line into words words = myline.split() # Iterate the words list for myword in words: # Write the results to standard output print '%s\t%s' % (myword, 1)
Stellen Sie sicher hat sein diese Datei Ausführungsrechte (chmod +x /home/ expert/hadoop-1.2.1/mapper.py).
#!/usr/bin/python from operator import itemgetter import sys current_word = "" current_count = 0 word = "" # Input takes from standard input for myline in sys.stdin: # Remove whitespace either side myline = myline.strip() # Split the input we got from mapper.py word, count = myline.split('\t', 1) # Convert count variable to integer try: count = int(count) except ValueError: # Count was not a number, so silently ignore this line continue if current_word == word: current_count += count else: if current_word: # Write result to standard output print '%s\t%s' % (current_word, current_count) current_count = count current_word = word # Do not forget to output the last word if needed! if current_word == word: print '%s\t%s' % (current_word, current_count)
Speichern Sie die Mapper und Minderer Codes in mapper.py und reducer.py in Hadoop Home-Verzeichnis. Stellen Sie sicher diese Dateien haben Ausführungsrechte (chmod + x mapper.py und chmod + x reducer.py). Als Python ist einbuchtung empfindlich so der gleiche Code kann heruntergeladen werden von den unten link.
$ $HADOOP_HOME/bin/hadoop jar contrib/streaming/hadoop-streaming-1. 2.1.jar \ -input input_dirs \ -output output_dir \ -mapper <path/mapper.py \ -reducer <path/reducer.py
Wo "\" ist verwendet für Zeilenfortsetzungs für klar Lesbarkeit.
./bin/hadoop jar contrib/streaming/hadoop-streaming-1.2.1.jar -input myinput -output myoutput -mapper /home/expert/hadoop-1.2.1/mapper.py -reducer /home/expert/hadoop-1.2.1/reducer.py
Im obigen Beispiel sind sowohl der Mapper und die Minderer sind Python-Skripte, die die Eingabe von Standardeingabe lesen und emittieren die Ausgabe in die Standardausgabe. Das Dienstprogramm wird eine Karte erstellen / Verkleinern Job,einreichen Ihren Auftrag auf einen geeigneten Cluster und den Fortgang der Arbeit zu überwachen, bis er abgeschlossen ist.
Wenn ein Skript ist für Mapper angegeben, wird jeder Mapper Aufgabe des Skripts als separater Prozess gestartet wird, wenn der Mapper wird initialisiert. Wie der Mapper Task läuft wird, wandelt es seine Eingaben in Zeilen und füttern die Zeilen in die Standardeingabe (STDIN) des Verfahrens. In der Zwischenzeit sammelt sich die Mapper die zeilenorientierte Ausgänge von der Standardausgabe (STDOUT) des Prozesses und Konvertiten wird jede Zeile in eine Schlüssel / Wert-Paar, das als der Ausgang des Mappers gesammelt. Standardmäßig ist das Präfix einer Zeile bis zum ersten Tab-Zeichen ist der Schlüssel und der Rest der Zeile wird sein (mit Ausnahme der Tab-Zeichen) der Wert . Wenn es kein Tab-Zeichen in der Zeile, dann die gesamte Zeile als Schlüssel angesehen und der Wert null ist. Dies kann jedoch angepasst werden, wie pro Notwendigkeit.
Wenn ein Skript ist für Minderer angegeben, jeweils Minderer Aufgabe wird das Skript als eigenständigen Prozess zu starten, wird der Druckminderer wird initialisiert. Als die Minderer Task läuft wird, wandelt es seine Eingabe-Taste / Werte-Paare in Zeilen und führt die Zeilen in die Standardeingabe (STDIN) des Verfahrens. In der Zwischenzeit sammelt sich das Reduzierstück die zeilenorientierte Ausgänge von der Standardausgabe (STDOUT) des Verfahrens, wird jede Zeile in eine Schlüssel / Wert-Paar, das als der Ausgang des Untersetzungsgetriebes aufgefangen wird. Standardmäßig ist das Präfix einer Zeile bis zum ersten Tab-Zeichen der Schlüssel und der Rest der Zeile (mit Ausnahme der Tab-Zeichen) ist der Wert. Dies kann jedoch nach spezifischen Anforderungen angepasst werden.
Parameters | Beschreibung |
---|---|
-input directory/file-name | Eingabe Standort für Mapper. (Erforderlich) |
-output directory-name | Ausgabe Standort für Minderer. (Erforderlich) |
-mapper executable or script or JavaClassName | Mapper ausführbar. (Erforderlich) |
-reducer executable or script or JavaClassName | Minderer ausführbar. (Erforderlich) |
-file file-name | Macht die Mapper, Minderer oder Kombinierer ausführbare verfügbar lokal auf den Rechenknoten. |
-inputformat JavaClassName | Klasse du Versorgung sollten Rückkehr Schlüssel / Wert-Paare von Text-Klasse zurück. Wenn nicht angegeben, wird TextEingangformat als Standard verwendet wird. |
-outputformat JavaClassName | Klasse du Versorgung sollten Rückkehr Schlüssel / Wert-Paare von Text-Klasse zurück. Wenn nicht angegeben, wird TextAusgabeformat als Standard verwendet wird. |
-partitioner JavaClassName | Klasse, der festlegt, die Verringerung einer Taste gesendet. |
-combiner streamingCommand or JavaClassName | Kombinierer ausführbare Datei für Karte ausgegeben werden. |
-cmdenv name=value | Übergibt die Umgebungsvariable, um Streaming-Befehle. |
-inputreader | Für Abwärtskompatibilität: gibt einen Rekord-Reader-Klasse (anstelle von ein Eingabeformat-Klasse). |
-verbose | wortreich Ausgabe. |
-lazyOutput | Erzeugt Ausgangs träge. Zum Beispiel wenn das Ausgabeformat auf FileOutputFormat basiert, die Ausgabedatei wird nur auf dem ersten Aufruf output.collect (oder Context.write). |
-numReduceTasks | Gibt die Bezeichnung des Getriebes. |
-mapdebug | Skript zu rufen, wenn Karte Vorgang fehlschlägt. |
-reducedebug | Skript zu rufen, wenn reduzieren Aufgabe scheitert. |