S3A MagicV2 Committer - Amazon EMR

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

S3A MagicV2 Committer

Mit der Version EMR-6.15.0 führt Amazon EMR einen neuen S3A-Committer-Typ ein, der als MagicV2-Committer bekannt ist. Umfassende Informationen zu dieser Funktion finden Sie in den entsprechenden Abschnitten der Dokumentation.

Der MagicV2 Committer stellt eine erweiterte Open-Source-Implementierung dar MagicCommitter, die speziell für die Optimierung des Schreibens von Dateien auf Amazon S3 über das S3A-Dateisystem entwickelt wurde. Wie sein Vorgänger nutzt es die mehrteiligen Upload-Funktionen von Amazon S3, um die traditionellen Listen- und Umbenennungsvorgänge zu eliminieren, die normalerweise mit Job- und Task-Commit-Phasen verbunden sind.

Im Vergleich zum Original weist der MagicV2-Committer eine überragende Leistung auf MagicCommitter, da er Dateien während der Commit-Phase der Aufgabe und nicht während der Commit-Phase des Jobs an den Ausgabespeicherort des Jobs schreibt. Dieser Ansatz ermöglicht das verteilte Schreiben von Dateien und macht die temporäre Speicherung von Commit-Metadaten auf Amazon S3 überflüssig, was zu einer verbesserten Kosteneffektivität führt. Darüber hinaus bietet der MagicV2-Committer mehr Flexibilität, da er das Überschreiben von Dateipfaden in mehreren Threads während des Commit-Prozesses ermöglicht.

Aktivieren Sie den MagicV2 Committer

Um den MagicV2-Committer zu aktivieren, übergeben Sie die folgende Konfiguration in Ihrer Job-Konfiguration oder verwenden Sie die Core-Site-Konfiguration, um die Eigenschaft festzulegen. Weitere Informationen finden Sie unter Konfigurieren von Anwendungen.

mapreduce.outputcommitter.factory.scheme.s3a=org.apache.hadoop.fs.s3a.commit.S3ACommitterFactory fs.s3a.committer.magic.enabled=true fs.s3a.committer.name=magicv2 fs.s3a.committer.magic.track.commits.in.memory.enabled=true

Für Workloads, bei denen das bestehende Verzeichnis vor dem Commit oder Schreiben der neuen Dateien überschrieben werden muss, ist neben der zuvor genannten Konfiguration die folgende zusätzliche Konfiguration erforderlich.

fs.s3a.committer.magic.overwrite.and.commit=true fs.s3a.committer.magic.delete.directory.threads=thread size

Der Standardwert für die Konfiguration istthreads. 20 Dieser Parameter sollte jedoch angepasst werden, wenn eine große Anzahl von Verzeichnissen überschrieben werden muss, um die Leistung zu verbessern. Dies ist nur in EMR-7.2.0 und höher verfügbar.

Überlegungen

  • Wenn die Java Virtual Machine (JVM) abstürzt oder beendet wird, während Aufgaben ausgeführt werden und Daten auf Amazon S3 geschrieben werden, ist es wahrscheinlicher, dass unvollständige mehrteilige Uploads zurückbleiben. Aus diesem Grund sollten Sie bei der Verwendung des MagicV2-Committers unbedingt die bewährten Methoden für den Umgang mit fehlgeschlagenen mehrteiligen Uploads befolgen. Weitere Informationen finden Sie im Abschnitt Bewährte Methoden für die Arbeit mit Amazon S3 S3-Buckets im Amazon EMR Management Guide.

  • Wenn ein Job fehlschlägt, sind alle Dateien, die durch die erfolgreichen Aufgaben übertragen wurden, weiterhin im Zielpfad sichtbar. In solchen Fällen muss der Benutzer die übergebenen Dateien manuell bereinigen, bevor er den Job auf demselben Zielpfad erneut ausführen kann.

  • Der MagicV2-Committer verbraucht für jede Datei, die bei einem Task-Versuch geschrieben wurde, eine geringe Menge an Speicher, bis die Aufgabe festgeschrieben oder abgebrochen wird. Bei den meisten Jobs ist die Menge an Arbeitsspeicher, die ry verbraucht, vernachlässigbar. In einigen Fällen, in denen ein einzelner Executor-Prozess eine große Anzahl von Aufgaben gleichzeitig abwickelt, kann dies jedoch zu einer hohen Speicherbelastung führen, sodass dem Container oder Executor möglicherweise der Arbeitsspeicher (OOM) ausgeht. Dieses Problem sollte durch eine Erhöhung des Container- oder Executor-Speichers behoben werden.