it-swarm.com.de

Wie entferne ich Knoten in Hadoop richtig?

Ich verwende Hadoop 1.1.2 in einem Cluster mit 10+ Maschinen. Ich möchte sowohl für HDFS als auch für MapReduce schön skalieren. Mit "schön" meine ich, dass ich verlange, dass keine Daten verloren gehen (HDFS-Knoten können außer Betrieb genommen werden), und Knoten, die eine Task ausführen, vor dem Herunterfahren beendet werden.

Ich habe bemerkt, dass der Prozess datanode stürzt, sobald die Außerbetriebnahme abgeschlossen ist, was gut ist. So entferne ich einen Knoten:

  • Knoten zu mapred.exclude hinzufügen
  • Fügen Sie hdfs.exclude einen Knoten hinzu
  • $ hadoop mradmin -refreshNodes
  • $ hadoop dfsadmin -refreshNodes
  • $ hadoop-daemon.sh stop tasktracker

Um den Knoten wieder hinzuzufügen (vorausgesetzt, er wurde wie oben entfernt), mache ich das.

  • Aus mapred.exclude entfernen
  • Entfernen Sie aus hdfs.exclude
  • $ hadoop mradmin -refreshNodes
  • $ hadoop dfsadmin -refreshNodes
  • $ hadoop-daemon.sh start tasktracker
  • $ hadoop-daemon.sh start datanode

Ist dies der richtige Weg, um "schön" zu skalieren? Beim Herunterskalieren stelle ich fest, dass die Jobdauer für bestimmte unglückliche Jobs stark ansteigt (da die Aufgaben, die auf dem entfernten Knoten ausgeführt wurden, neu geplant werden müssen).

21

Wenn Sie noch keine dfs-Ausschlussdatei festgelegt haben, folgen Sie den Anweisungen 1-3. Sonst ab 4.

  1. Beenden Sie den NameNode.
  2. Stellen Sie dfs.hosts.exclude so ein, dass es auf eine leere Ausschlussdatei verweist. 
  3. Starten Sie NameNode neu.
  4. Geben Sie in der DFS-Ausschlussdatei die Knoten mit dem vollständigen Hostnamen oder dem IP- oder IP: Port-Format an. 
  5. Machen Sie dasselbe in mapred.exclude
  6. bin/hadoop dfsadmin -refreshNodes ausführen. Dadurch wird der NameNode gezwungen, die Ausschlussdatei erneut zu lesen und den Stilllegungsprozess zu starten.
  7. bin/hadoop mradmin -refreshNodes ausführen
  8. Überwachen Sie die NameNode- und JobTracker-Webbenutzeroberfläche und vergewissern Sie sich, dass der Außerbetriebnahmeprozess ausgeführt wird. Das Update kann einige Sekunden dauern. Meldungen wie "Decommission complete for node XXXX.XXXX.X.XX:XXXXX" werden in den NameNode-Protokolldateien angezeigt, wenn die Außerbetriebnahme abgeschlossen ist. Dann können Sie die Knoten aus dem Cluster entfernen. 
  9. Wenn der Prozess abgeschlossen ist, listet die Benennenknoten-Benutzeroberfläche den Datenknoten als außer Betrieb gesetzt auf. Auf der Jobtracker-Seite wird die aktualisierte Anzahl der aktiven Knoten angezeigt. Führen Sie zur Überprüfung bin/hadoop dfsadmin -report aus. Stoppen Sie den Datenanode- und Tasktracker-Prozess auf den ausgeschlossenen Knoten. 
  10. Wenn Sie den Computer nicht erneut in den Cluster einführen möchten, entfernen Sie ihn aus den Include- und Exclude-Dateien.

Um einen Knoten als Datanode und Tasktracker hinzuzufügen, siehe Hadoop FAQ Seite

EDIT: Was passiert mit dem Job, wenn ein Live-Knoten aus dem Cluster entfernt werden soll?

Die Jobs, die auf einem zu deaktivierenden Knoten ausgeführt werden, werden davon betroffen, da die Aufgaben des Jobs, der auf diesem Knoten geplant ist, als KILLED_UNCLEAN (für Map- und Reduction-Aufgaben) oder KILLED (für Job-Setup- und Bereinigungs-Tasks) gekennzeichnet sind. Siehe Zeile 4633 in JobTracker.Java für Details. Der Job wird darüber informiert, dass diese Aufgabe fehlgeschlagen ist. In der Regel wird der Job-Tracker die Ausführung neu planen. Nach vielen wiederholten Fehlern kann jedoch stattdessen entschieden werden, dass der gesamte Job fehlschlägt oder erfolgreich ist. Siehe Zeile 2957 in JobInProgress.Java .

29
Tejas Patil

Sie sollten wissen, dass Hadoop die Daten wirklich in mehreren Kopien zur Verfügung haben möchte, um eine gute Leistung zu erzielen. Durch das Entfernen von Knoten entfernen Sie die Chancen, dass die Daten optimal verfügbar sind, und Sie stellen eine zusätzliche Belastung für den Cluster dar, um die Verfügbarkeit sicherzustellen.

Das heißt Wenn Sie einen Knoten entfernen, tun Sie dies, damit eine zusätzliche Kopie aller Daten an anderer Stelle erstellt wird. Daher sollten Sie dies nicht nur zum Spaß tun, es sei denn, Sie verwenden ein anderes Datenverwaltungs-Paradigma als in der Standardkonfiguration (= 3 Kopien im Cluster aufbewahren).

Und damit ein Hadoop-Cluster gut funktioniert, sollten Sie die Daten tatsächlich im Cluster speichern. Andernfalls können Sie die Berechnung nicht wirklich auf die Daten verschieben, da die Daten auch noch nicht vorhanden sind. Bei Hadoop geht es viel darum, "intelligente Laufwerke" zu haben, die Berechnungen ausführen können, bevor die Daten über das Netzwerk gesendet werden.

Um dies sinnvoll zu machen, müssen Sie wahrscheinlich Ihren Cluster aufteilen. Lassen Sie einen Satz von Knoten die 3 Masterkopien der Originaldaten und einige "Add-On" -Knoten haben, die nur zum Speichern von Zwischendaten verwendet werden und Berechnungen für diesen Teil durchführen. Ändern Sie niemals die Master-Knoten, so dass Sie Ihre Daten nicht neu verteilen müssen. Add-On-Knoten nur dann herunterfahren, wenn sie leer sind? Das ist aber wahrscheinlich noch nicht implementiert.

3
Anony-Mousse

Während der Außerbetriebnahme werden temporäre oder Staging-Dateien automatisch bereinigt. Diese Dateien fehlen jetzt und Hadoop erkennt nicht, wie das verschwunden ist. Der Stilllegungsprozess wartet also so lange, bis das Problem behoben ist, auch wenn die eigentliche Außerbetriebnahme für alle anderen Dateien durchgeführt wird.

In der Hadoop-GUI - wenn Sie feststellen, dass der Parameter "Anzahl der unterreplizierten Blöcke" im Laufe der Zeit nicht abnimmt oder nahezu konstant ist, ist dies wahrscheinlich der Grund.

Listen Sie die Dateien mit dem folgenden Befehl auf

hadoop fsck/-files -blocks -racks

Wenn Sie feststellen, dass diese Dateien temporär und nicht erforderlich sind, löschen Sie diese Dateien oder Ordner

Beispiel: hadoop fs -rmr /var/local/hadoop/hadoop/.staging/* (geben Sie hier den richtigen Pfad an)

Dies würde das Problem sofort lösen. Deaktivierte Knoten werden innerhalb von 5 Minuten zu Dead Nodes verschoben.

0
Prabakaran