CHISPA EMR MagicCommitProtocol - Amazon EMR

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

CHISPA EMR MagicCommitProtocol

A partir de la versión 6.15.0 de EMR, MagicCommitProtocol se convierte en la opción predeterminada FileCommitProtocol para Spark cuando se utiliza el sistema de archivos S3A.

MagicCommitProtocol

MagicCommitProtocol Se trata de una implementación alternativa a la FileCommitProtocolque está optimizada para escribir archivos con EMR Spark en Amazon S3 cuando se utiliza el sistema de archivos S3A. Este protocolo busca mejorar el rendimiento de las aplicaciones al evitar operaciones de cambio de nombre en Amazon S3 durante las fases de confirmación del trabajo y de las tareas.

MagicCommitProtocol Es la FileCommitProtocol implementación predeterminada que usa Spark cuando se ejecuta en Amazon Elastic Map Reduce (EMR) cuando se utiliza el sistema de archivos S3A. Utiliza MagicCommitProtocol internamente el MagicV2Committer para realizar las escrituras de archivos en Amazon S3.

En el caso de las operaciones de inserción estática, graba MagicCommitProtocol los archivos en la ubicación de salida del trabajo durante la fase de confirmación de la tarea. En cambio, en operaciones de inserción dinámica con sobrescritura, los archivos generados por los intentos de tarea solo aparecen en la ubicación de salida cuando el trabajo se confirma. Esto se logra mediante la exportación de metadatos de confirmación hacia el controlador de Spark durante la llamada de confirmación de la tarea.

Habilitación de MagicCommitProtocol

MagicCommitProtocol Está habilitado de forma predeterminada para Spark que se ejecuta en Amazon Elastic Map Reduce (EMR) cuando se utiliza el sistema de archivos S3A.

Para usar el sistema de archivos S3A, puede hacer lo siguiente:

  1. Especificar el esquema del archivo como s3a:// al definir la tabla, partición o directorio.

  2. Establecer la propiedad fs.s3.impl=org.apache.hadoop.fs.s3a.S3AFileSystem en el archivo core-site.xml.

Deshabilitar el MagicCommitProtocol

  1. Puede establecer la propiedad spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocol en falso codificándola de forma rígida en un SparkConf, pasándola como un parámetro --conf en el intérprete de comandos de Spark o las herramientas spark-submit y spark-sql, o en conf/spark-defaults.conf. Para obtener más información, consulte Spark configuration en la documentación de Apache Spark.

    En el siguiente ejemplo, se muestra cómo deshabilitarla MagicCommitProtocol mientras se ejecuta un spark-sql comando.

    spark-sql \ --conf spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocol=false \ -e "INSERT OVERWRITE TABLE target_table SELECT * FROM source_table;"
  2. Utilice la clasificación de configuración spark-defaults para establecer la propiedad spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocol en falso. Para obtener más información, consulte Configuración de aplicaciones.

Consideraciones sobre MagicCommitProtocol

  • En el caso de la inserción de particiones estáticas, en los ejecutores de Spark, se MagicCommitProtocol consume una pequeña cantidad de memoria por cada archivo escrito por un intento de tarea hasta que la tarea se confirma o se anula. En la mayoría de los trabajos, la cantidad de memoria consumida es insignificante. No requiere memoria adicional en el controlador de Spark.

  • En el caso de la inserción dinámica de particiones, en los controladores de Spark, se MagicCommitProtocol necesita memoria para almacenar la información de los metadatos de cada archivo confirmado hasta que el trabajo se confirme o se cancele. En la mayoría de los trabajos, la configuración de memoria predeterminada del controlador de Spark es insignificante.

    En los trabajos que tienen tareas de ejecución prolongada y que escriben un gran número de archivos, la memoria que consume el protocolo de confirmación puede ser apreciable y requerir algunos ajustes de la memoria asignada a Spark, especialmente a los ejecutores de Spark. Puede ajustar la memoria mediante la propiedad spark.driver.memory para los controladores de Spark y la propiedad spark.executor.memory para los ejecutores de Spark. Como pauta general, una sola tarea que escribe 100 000 archivos, normalmente requerirá 200 MB de memoria adicionales. Para obtener más información, consulte Application properties en la documentación de configuración de Apache Spark.