Hadoop - Streaming


Advertisements

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.

Beispiel verwendung Python

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.

Mapper Phase Code

!/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).

Minderer Phase Code

#!/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.

Die Ausführung der Wordcount-Programm

$ $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.

zum Beispiel

./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

Wie Streaming Werke

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.

Wichtige Kommandos

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.
Advertisements