Wie zu vermeiden OutOfMemoryException beim ausführen von Hadoop?
Bin ich mit einem Hadoop-job über 1,5 TB an Daten mit viel pattern-matching. Ich habe mehrere Maschinen mit 16GB RAM, und ich bekomme immer OutOfMemoryException
auf diesen job mit diesen Daten (ich bin mit Hive).
Ich würde gerne wissen, wie Sie optimal setzen Sie die option HADOOP_HEAPSIZE
im Datei - hadoop-env.sh
so, mein job würde das nicht scheitern. Ist es überhaupt möglich, setzen Sie diese option, damit meine Arbeit nicht scheitern?
Wenn ich HADOOP_HEAPSIZE
zu 1,5 GB und entfernt die Hälfte der pattern-matching von query, Auftrag erfolgreich ausgeführt. Also, was ist diese option für, wenn es nicht hilft, die Vermeidung von job-Ausfälle?
Ich ment, um mehr tun, das Experimentieren mit optimalen setup, aber da diese jobs nehmen >10hr zu führen, bitte ich um euren Rat.
InformationsquelleAutor der Frage wlk | 2010-08-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist der Job nicht, oder ist Ihr server abstürzt? Wenn Ihr Job scheitern, weil OutOfMemmory auf Knoten, die Sie können tweek die Anzahl der max Karten und Reduzierstücke und die JVM setzt bei jedem so, dass wird nie passieren. mapred.Kind.java.entscheidet sich (die Standardeinstellung ist 200Xmx) hat in der Regel erhöht werden, basierend auf Ihren Daten-Knoten-spezifischen hardware.
http://allthingshadoop.com/2010/04/28/map-reduce-tips-tricks-your-first-real-cluster/
Max tasks setup kann auf der Namenode oder überschrieben (und Satz-Finale), die auf Daten Knoten können unterschiedliche hardware-Konfigurationen. Die max-Aufgaben-setup für die beiden Kartografen-und Reduzierstücke. Um diese zu berechnen, es basiert auf der CPU (- Kerne) und die Menge an RAM, die Sie haben und auch die JVM-max Sie setup in mapred.Kind.java.setzt (Standard ist 200). Der Datanode-und Tasktracker sind jeweils festgelegt 1GB so für eine 8GB Maschine die mapred.tasktracker.Karte.Aufgaben.maximal könnte auf 7 eingestellt und die mapred.tasktracker.reduzieren.Aufgaben.maximal auf 7 eingestellt, mit der mapred.Kind.java.opts-400Xmx (vermutlich 8-Kerne). Bitte beachten Sie diese Aufgabe maxes sind, wie viel von Ihrer CPU, wenn Sie nur 1 CPU mit 1 Kern dann ist es Zeit, um neue hardware für Ihre Daten-Knoten oder legen Sie die Maske, die Aufgaben zu 1. Ob Sie 1 CPU mit 4 Kernen, dann Einstellung anzeigen zu 3 und der Reduzierung auf 3 wäre gut (Einsparung von 1 Kern für den daemon).
Standardmäßig gibt es nur ein Druckminderer und Sie brauchen, um zu konfigurieren, mapred.reduzieren.Aufgaben, die zu mehr als einem. Dieser Wert sollte irgendwo zwischen .95 und den 1,75-fachen der maximalen Anzahl der Aufgaben pro Knoten mal der Anzahl der Datenknoten. Also, wenn Sie 3-Daten Knoten, und es ist setup max Aufgaben der 7 dann konfigurieren Sie diese zwischen 25 und 36.
Wenn Ihr server abstürzt, mit OutOfMemory-Probleme, dann ist das, wo die HADOOP_HEAPSIZE kommt nur für die Prozesse heap (nicht die Ausführung von Aufgaben).
Schließlich, wenn Ihr Job bringt, lange können Sie überprüfen, um zu sehen, wenn Sie eine andere gute Konfiguration ist darüber hinaus mapred.komprimieren.Karte.Ausgabe. Wenn dieser Wert auf true sollte (Gleichgewicht zwischen der Zeit, zu komprimieren vs übertragen) beschleunigt die Reduzierstücke kopieren erheblich insbesondere wenn Sie mit großen Datensätzen arbeiten. Oft Aufträge brauchen Zeit, aber es gibt auch Optionen zum optimieren zu helfen, die Dinge beschleunigen =8^)
InformationsquelleAutor der Antwort Joe Stein