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 zur Standardeinstellung FileCommitProtocol für Spark, wenn das S3A-Dateisystem verwendet wird.

MagicCommitProtocol

Dies MagicCommitProtocol ist eine alternative Implementierung von, die für FileCommitProtocoldas 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.

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

Bei statischen Einfügevorgängen 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 Dateien, die bei Versuchen mit der Aufgabe geschrieben wurden, erst nach dem Commit des Jobs am Ausgabespeicherort des Jobs. Dies wird erreicht, indem die Commit-Metadaten beim Commit-Aufruf der Aufgabe zurück in den Spark-Treiber exportiert werden.

Aktivieren MagicCommitProtocol

Das MagicCommitProtocol ist standardmäßig aktiviert, wenn Spark 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 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 ein spark-sql Befehl deaktiviert wird MagicCommitProtocol , während er 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 beansprucht der auf Spark-Executoren eine geringe Menge an Speicher für jede Datei, die durch einen Task-Versuch geschrieben wurde, 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 MagicCommitProtocol benötigt der auf Spark-Treibern Speicher, 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, in der Regel zusätzliche 200 MB Arbeitsspeicher benötigt werden. Weiter Informationen finden Sie unter Anwendungseigenschaften in der Dokumentation zur Konfiguration von Apache Spark.