View a markdown version of this page

EMR Spark MagicCommitProtocol - 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.

EMR Spark MagicCommitProtocol

Ab EMR 6.15.0 MagicCommitProtocol wird es zum Standard FileCommitProtocol für Spark, wenn das S3A-Dateisystem verwendet wird.

MagicCommitProtocol

Das MagicCommitProtocol ist eine alternative Implementierung von, die für FileCommitProtocol das Schreiben von Dateien mit EMR Spark auf Amazon S3 optimiert ist, wenn das S3A-Dateisystem verwendet wird. Dieses Protokoll zielt darauf ab, die Anwendungsleistung zu verbessern, indem die Verwendung von Umbenennungsvorgängen in Amazon S3 während der Job- und Task-Commit-Phasen vermieden wird.

Das MagicCommitProtocol ist die FileCommitProtocol Standardimplementierung, die von Spark auf Amazon Elastic Map Reduce (EMR) verwendet wird, wenn das S3A-Dateisystem verwendet wird. Das verwendet MagicCommitProtocol intern den MagicV2Committer, um die Datei-Schreibvorgänge auf Amazon S3 durchzuführen.

Bei statischen Einfügeoperationen MagicCommitProtocol schreibt der die Dateien während der Commit-Phase der Aufgabe in den Ausgabespeicherort des Jobs. Im Gegensatz dazu erscheinen bei dynamischen Einfüge-Überschreibvorgängen die durch Task-Versuche geschriebenen Dateien erst beim Commit im Ausgabeverzeichnis des Jobs. Dies wird erreicht, indem die Commit-Metadaten beim Commit-Aufruf der Aufgabe zurück in den Spark-Treiber exportiert werden.

Aktivieren MagicCommitProtocol

Die MagicCommitProtocol ist standardmäßig für Spark aktiviert, der auf Amazon Elastic Map Reduce (EMR) läuft, wenn das S3A-Dateisystem verwendet wird.

Um das S3A-Dateisystem zu verwenden, können Sie entweder:

  1. Verwenden Sie das Dateischema wie s3a:// bei der Definition der Tabelle, Partition oder des Verzeichnisses.

  2. Stellen Sie die Konfiguration fs.s3.impl=org.apache.hadoop.fs.s3a.S3AFileSystem in core-site.xml ein.

Deaktivierung der MagicCommitProtocol

  1. Sie können spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocol den Wert auf false setzenSparkConf, indem Sie ihn in a fest codieren spark-submit und ihn als --conf Parameter in der Spark-Shell oder in den spark-sql Tools oder in übergeben. conf/spark-defaults.conf Weitere Informationen finden Sie unter Spark-Konfiguration in der Apache Spark-Dokumentation.

    Das folgende Beispiel zeigt, wie das Gerät deaktiviert wird, MagicCommitProtocol während ein spark-sql Befehl ausgeführt wird.

    spark-sql \ --conf spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocol=false \ -e "INSERT OVERWRITE TABLE target_table SELECT * FROM source_table;"
  2. Verwenden Sie die spark-defaults Konfigurationsklassifizierung, um die spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocol Eigenschaft auf False zu setzen. Weitere Informationen finden Sie unter Konfigurieren von Anwendungen.

MagicCommitProtocol Überlegungen

  • Beim Einfügen statischer Partitionen MagicCommitProtocol verbraucht das auf Spark-Executoren eine kleine Menge an Speicher für jede durch einen Taskversuch geschriebene Datei, bis die Aufgabe festgeschrieben oder abgebrochen wird. Bei den meisten Aufträgen ist die Menge des belegten Speichers vernachlässigbar. Für den Spark-Treiber ist kein zusätzlicher Speicherbedarf erforderlich

  • Für das dynamische Einfügen von Partitionen ist auf Spark-Treibern Speicherplatz MagicCommitProtocol erforderlich, um die Metadateninformationen jeder übergebenen Datei zu speichern, bis der Job festgeschrieben oder abgebrochen wird. Bei den meisten Aufträgen ist die standardmäßige Speichereinstellung des Spark-Treibers vernachlässigbar.

    Bei Aufträgen mit Aufgaben mit langer Laufzeit, die eine große Anzahl von Dateien schreiben, kann der Speicherverbrauch des Commit-Protokolls spürbar sein und Anpassungen des für Spark zugewiesenen Speichers erfordern, insbesondere für Spark-Ausführer. Sie können den Speicher mithilfe der spark.driver.memory-Eigenschaft für Spark-Treiber und der Eigenschaft für spark.executor.memory-Spark-Aufträge optimieren. Als Richtlinie gilt, dass für eine einzelne Aufgabe, die 100.000 Dateien schreibt, normalerweise zusätzliche 200 MB Arbeitsspeicher benötigt werden. Weiter Informationen finden Sie unter Anwendungseigenschaften in der Dokumentation zur Konfiguration von Apache Spark.