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 tiene como objetivo mejorar el rendimiento de las aplicaciones al evitar el uso de operaciones de cambio de nombre en Amazon S3 durante las fases de confirmación de tareas y 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. Por el contrario, en las operaciones de sobrescritura de inserción dinámica, los archivos escritos al intentar realizar una tarea solo aparecen en la ubicación de salida del trabajo cuando se confirma el trabajo. Esto se consigue exportando los metadatos de confirmación de nuevo al controlador de Spark en la llamada de confirmación de la tarea.

Habilitando 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 utilizar el sistema de archivos S3A, puede hacer lo siguiente:

  1. Utilice el esquema de archivos s3a:// al definir la tabla, la partición o el directorio.

  2. Establezca la configuración fs.s3.impl=org.apache.hadoop.fs.s3a.S3AFileSystem en core-site.xml.

Deshabilitar el MagicCommitProtocol

  1. Puedes spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocol establecerlo en false codificándolo de forma rígida en unSparkConf, pasándolo como --conf parámetro en el shell o spark-submit en las spark-sql herramientas de Spark, o en. conf/spark-defaults.conf Para obtener más información, consulta la configuración de Spark en la documentación de Apache Spark.

    El siguiente ejemplo muestra cómo deshabilitarlo 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 spark-defaults de configuración para establecer la spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocol propiedad en false. 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, 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. El controlador Spark no requiere memoria adicional

  • Para la inserción dinámica de particiones, en los controladores 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 norma, una sola tarea de escribir 100 000 archivos normalmente requeriría 200 MB de memoria adicionales. Para obtener más información, consulte Application properties en la documentación de configuración de Apache Spark.