EMR Spark MagicCommitProtocol - Amazon EMR

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

EMR Spark MagicCommitProtocol

A partire da EMR 6.15.0, MagicCommitProtocol diventa l'impostazione predefinita FileCommitProtocol per Spark quando si utilizza il file system S3A.

MagicCommitProtocol

MagicCommitProtocol Si tratta di un'implementazione alternativa ottimizzata per FileCommitProtocolla scrittura di file con EMR Spark su Amazon S3 quando si utilizza il file system S3A. Questo protocollo mira a migliorare le prestazioni delle applicazioni evitando l'uso di operazioni di ridenominazione in Amazon S3 durante le fasi di job e task commit.

MagicCommitProtocol È l' FileCommitProtocol implementazione predefinita utilizzata da Spark in esecuzione su Amazon Elastic Map Reduce (EMR) quando viene utilizzato il file system S3A. Utilizza MagicCommitProtocol internamente MagicV2Committer per eseguire le scritture di file su Amazon S3.

Per le operazioni di inserimento statiche, MagicCommitProtocol scrive i file nella posizione di output del lavoro durante la fase di conferimento dell'attività. Al contrario, per le operazioni dinamiche di sovrascrittura degli inserti, i file scritti dai tentativi di operazione vengono visualizzati nella posizione di output del lavoro solo dopo il completamento del lavoro. Ciò si ottiene esportando nuovamente i metadati di commit nel driver Spark durante la chiamata di commit del task.

Abilitazione MagicCommitProtocol

MagicCommitProtocol È abilitato per impostazione predefinita per Spark in esecuzione su Amazon Elastic Map Reduce (EMR) quando si utilizza il file system S3A.

Per utilizzare il file system S3A, puoi:

  1. Usa lo schema di file come s3a:// quando definisci la tabella, la partizione o la directory.

  2. Imposta la configurazione fs.s3.impl=org.apache.hadoop.fs.s3a.S3AFileSystem in core-site.xml.

Disabilitazione di MagicCommitProtocol

  1. Puoi spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocol impostarlo su false codificandolo in aSparkConf, passandolo come --conf parametro nella shell Spark o spark-submit and spark-sql tools, oppure in. conf/spark-defaults.conf Per ulteriori informazioni, consulta la configurazione di Spark nella documentazione di Apache Spark.

    L'esempio seguente mostra come disabilitare MagicCommitProtocol durante l'esecuzione di un comando. spark-sql

    spark-sql \ --conf spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocol=false \ -e "INSERT OVERWRITE TABLE target_table SELECT * FROM source_table;"
  2. Utilizzate la classificazione di spark-defaults configurazione per impostare la spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocol proprietà su false. Per ulteriori informazioni, consulta la sezione Configurazione delle applicazioni.

MagicCommitProtocol considerazioni

  • Per l'inserimento di partizioni statiche, negli esecutori Spark, MagicCommitProtocol consuma una piccola quantità di memoria per ogni file scritto da un tentativo di operazione fino a quando l'operazione non viene completata o interrotta. Nella maggior parte dei processi la quantità di memoria consumata è trascurabile. Non è richiesta alcuna memoria aggiuntiva per il driver Spark

  • Per l'inserimento dinamico delle partizioni, sui driver Spark, è MagicCommitProtocol necessaria memoria per archiviare le informazioni sui metadati di ogni file salvato fino al completamento o all'interruzione del lavoro. Nella maggior parte dei processi, l'impostazione predefinita della memoria del driver Spark è trascurabile.

    Per i processi che presentano attività di lunga esecuzione che scrivono un numero elevato di file, la memoria che il protocollo di commit consuma può essere notevole e rende necessario adeguare la memoria allocata per Spark, specialmente per gli esecutori Spark. È possibile regolare la memoria utilizzando la proprietà spark.driver.memory per i driver Spark e la proprietà spark.executor.memory per gli esecutori Spark. Come linea guida, una singola operazione di scrittura di 100.000 file richiederebbe in genere 200 MB di memoria aggiuntivi. Per ulteriori informazioni, consulta le Proprietà delle applicazioni nella documentazione relativa alla configurazione di Apache Spark.