View a markdown version of this page

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

EMR Spark MagicCommitProtocol

A partir de EMR 6.15.0, MagicCommitProtocol pasa a ser el predeterminado FileCommitProtocol para Spark cuando se utiliza el sistema de archivos S3A.

MagicCommitProtocol

Se trata de una implementación alternativa FileCommitProtocol que MagicCommitProtocol 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 utiliza 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.

Para las operaciones de inserción estáticas, MagicCommitProtocol escribe 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.

Habilitando MagicCommitProtocol

MagicCommitProtocol Está habilitada de forma predeterminada para que Spark se ejecute 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.

    El siguiente ejemplo muestra cómo deshabilitar 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.

MagicCommitProtocol consideraciones

  • En el caso de la inserción de particiones estáticas, en los ejecutores de Spark, MagicCommitProtocol consume una pequeña cantidad de memoria por cada archivo escrito en un intento de tarea hasta que la tarea se confirme o aborte. 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 requiere memoria para almacenar la información de 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.