

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 name="emr-spark-magic-commit-protocol"></a>

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

## MagicCommitProtocol
<a name="magic-commit-protocol"></a>

 MagicCommitProtocol Si tratta di un'implementazione alternativa ottimizzata per [FileCommitProtocol](https://dlcdn.apache.org/spark/docs/2.4.2/api/java/org/apache/spark/internal/io/FileCommitProtocol.html)la 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](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/s3a-magicv2-committer.html) 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
<a name="enabling-magic-commit-protocol"></a>

 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.

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

## Disabilitazione di MagicCommitProtocol
<a name="disabling-magic-commit-protocol"></a>

1. Puoi `spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocol` impostarlo su false codificandolo in a`SparkConf`, 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](https://spark.apache.org/docs/latest/configuration.html).

   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;"
   ```

1. 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](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html).

## MagicCommitProtocol considerazioni
<a name="magic-commit-considerations"></a>
+ 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. Il driver Spark non richiede memoria aggiuntiva
+ 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](https://spark.apache.org/docs/latest/configuration.html#application-properties) nella documentazione relativa alla configurazione di Apache Spark.