Praxistipp Big Data Performance Tuning So holen Sie mehr aus Ihrem Hadoop Cluster raus

Autor / Redakteur: Michael Matzer / Nico Litzel |

Das Performance Tuning eines Hadoop Clusters ist eine komplexe Aufgabe und will gut vorbereitet sein. Zum Glück stehen dem Kundigen mit einer Hadoop-Distribution eine Reihe von Monitoring- und Benchmarking-Tools zur Verfügung. Eine Reihe von Parametern, die die Leistung beeinflussen, lässt sich damit feintunen.

Anbieter zum Thema

Die Endergebnisse des AMD-Tunings im Vergleich.
Die Endergebnisse des AMD-Tunings im Vergleich.
(Bild: M. Matzer)

Für das Tuning der Hadoop Performance sind Fachkenntnisse empfehlenswert, die sich auf das Betriebssystem Linux, den entsprechenden Hypervisor, die Java VM (JVM), das Netzwerk und die Hardware erstrecken sollten. Kurzum: auf den gesamten Hadoop- und Non-Hadoop-Technologiestapel. Im folgenden, sehr knappen Überblick wird vorausgesetzt, dass sich alle diese Komponenten im aktuellsten Zustand befinden, insbesondere die Software.

Wilfried Hoge, Datenbankexperte bei IBM Deutschland
Wilfried Hoge, Datenbankexperte bei IBM Deutschland
(Bild: IBM)
„Das Meiste holt man typischerweise durch das Tuning der Anwendung heraus, dann kommt erst die Software und Hardware“, meint Wilfried Hoge, Datenbankspezialist bei IBM Deutschland. „Wichtig ist immer als Basis eine gute Hardware-Architektur, die Engpässe vermeiden hilft.“

Um aber das Betriebssystem auf die Handhabung eines Hadoop Clusters vorzubereiten, sind kleine Anpassungen nötig. So soll vermieden werden, dass dem System die Puste ausgeht, nur weil ein paar Limits zu eng gesetzt sind. Die voreingestellte Anzahl offener File Descriptors (FD) wird mit dem Befehl ulimit so konfiguriert, dass dieser Wert auf 32768 oder einen ähnlich hohen Wert gesetzt wird, je nach Clustergröße. Zudem sollte im Linux-Kernel der Wert net.core.somaxconn nicht auf dem Default-Wert von 128 bleiben, sondern wesentlich höher liegen, beispielsweise 1024.

Benchmarks

Das Hadoop Framework weist über 150 konfigurierbare Parameter auf, die die Leistung beeinflussen. Hinzukommen in den Zusatzschichten des Hadoop-Stapels ähnlich viele Parameter. Folglich muss sich eine Beschreibung der wichtigsten Vorgaben auf die praktischsten und effektivsten Parameter beschränken.

Wie effektiv das Tuning ist, muss sich mit dem richtigen Benchmarktest und den geeigneten Monitoring- und Tuning-Tools überwachen und einstellen lassen. Einer der gängigsten in Hadoop mitgelieferten Benchmarks ist TeraSort, der einfach ein Terabyte an Daten mit MapReduce sortiert.

TeraSort ist beliebt, weil er gleichermaßen Prozessor, Memory, die Disks und das Netzwerk belastet, sodass er als zuverlässiger Indikator für die Leistung des Gesamtsystems herangezogen werden kann. „Tuning ist immer Workload-abhängig“, ergänzt Wilfried Hoge. „Eine für TeraSort getunte Hadoop-Umgebung muss nicht optimal für die Kunden-Workloads sein.“

Weitere Benchmark-Tests

  • Der STREAM Benchmark wird verwendet, um die Leistung des Memory-Subsystems und des NUMA-Verhaltens der Hardware festzustellen.
  • Der IOzone File System Benchmark kann helfen, die Baseline Performance des IO-Subsystems festzustellen.
  • Netperf lässt sich verwenden, um die Netzwerk-Infrastruktur einem Belastungstest zu unterziehen und ihre Baseline-Performance festzustellen.
  • Hadoop bringt selbst Mikro-Benchmarktests wie etwa DFSIO, NNBench und MRBench mit. Sie lassen sich verwenden, um den Aufbau des Hadoop-Frameworks zu prüfen.
  • Benchmarks wie etwa SPECcpu, SPECjbb und SPECjvm können ebenfalls hilfreich sein.

Hoge verweist auf die Systemanforderungen und Best Practices der Distributoren: „Sie geben ebenfalls wichtige Hinweise für die Einstellung von Parametern.“

Stell- und Kenngrößen

Es kann vorkommen, dass MapReduce-Aufgaben den Fortschritt von Hadoop-Workloads nicht „rechtzeitig“ anzeigen. Rechtzeitig bedeutet hier einen Zeitpunkt, der innerhalb des Default-Zeitlimits von 600 Sekunden liegt. Das ist der mapred.task.timeout, der in der Datei mapred-site.xml festgelegt wird. Je nach Workload sollte dieser Wert erhöht werden, ohne jedoch ein vernünftiges Maß zu überschreiten.

Sollten Exceptions wie java.net.SocketTimeoutException auftauchen, die besagen, dass ein „Timeout während des Wartens auf Bereitschaft des Channels für Lesen/Schreiben“ eintritt, dann sollten in der Datei hdfs-site.xml die Werte dfs.socket.timeout und dfs.datanode.socket.write.timeout erhöht werden, bis sie ein akzeptables Niveau erreicht haben.

(ID:43105672)