EMR Spark MagicCommitProtocol - Amazon EMR

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

EMR Spark MagicCommitProtocol

À partir de la version 6.15.0 d'EMR, MagicCommitProtocol il devient la valeur par défaut FileCommitProtocol pour Spark lors de l'utilisation du système de fichiers S3A.

MagicCommitProtocol

MagicCommitProtocol Il s'agit d'une implémentation alternative optimisée pour écrire des fichiers avec EMR Spark sur Amazon S3 lors de l'utilisation du système de fichiers S3A. FileCommitProtocol Ce protocole vise à améliorer les performances des applications en évitant d'utiliser des opérations de renommage dans Amazon S3 pendant les phases de validation des tâches et des tâches.

MagicCommitProtocol Il s'agit de l' FileCommitProtocol implémentation par défaut utilisée par Spark s'exécutant sur Amazon Elastic Map Reduce (EMR) lorsque le système de fichiers S3A est utilisé. Il utilise MagicCommitProtocol en interne le MagicV2Committer pour effectuer les écritures de fichiers sur Amazon S3.

Pour les opérations d'insertion statique, les MagicCommitProtocol fichiers sont écrits dans l'emplacement de sortie de la tâche pendant la phase de validation de la tâche. En revanche, pour les opérations d'insertion et de réécriture dynamiques, les fichiers écrits par des tentatives de tâche apparaissent uniquement dans l'emplacement de sortie de la tâche lors de la validation de la tâche. Pour ce faire, les métadonnées de validation sont réexportées vers le pilote Spark lors de l'appel de validation de la tâche.

Activant MagicCommitProtocol

MagicCommitProtocol Il est activé par défaut pour que Spark s'exécute sur Amazon Elastic Map Reduce (EMR) lors de l'utilisation du système de fichiers S3A.

Pour utiliser le système de fichiers S3A, vous pouvez soit :

  1. Utilisez le schéma de fichier comme s3a:// lors de la définition de la table, de la partition ou du répertoire.

  2. Définissez la configuration fs.s3.impl=org.apache.hadoop.fs.s3a.S3AFileSystem dans le fichier core-site.xml.

Désactivation du MagicCommitProtocol

  1. Vous pouvez le spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocol définir sur false en le codant en dur dans aSparkConf, en le passant en tant que --conf paramètre dans le shell Spark ou dans spark-submit les spark-sql outils, ou en conf/spark-defaults.conf le transmettant. Pour plus d'informations, consultez la section Configuration de Spark dans la documentation d'Apache Spark.

    L'exemple suivant montre comment le désactiver MagicCommitProtocol lors de l'exécution d'une spark-sql commande.

    spark-sql \ --conf spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocol=false \ -e "INSERT OVERWRITE TABLE target_table SELECT * FROM source_table;"
  2. Utilisez la classification spark-defaults de configuration pour définir la spark.sql.execution.datasources.SQLEmrOptimizedCommitProtocol.leverageMagicCommitProtocol propriété sur false. Pour plus d'informations, consultez Configuration des applications.

MagicCommitProtocol considérations

  • Pour l'insertion d'une partition statique, sur les exécuteurs Spark, chaque fichier écrit par une tentative de tâche MagicCommitProtocol consomme une petite quantité de mémoire jusqu'à ce que la tâche soit validée ou abandonnée. La quantité de mémoire consommée est négligeable dans la plupart des tâches. Aucune mémoire supplémentaire n'est requise sur le pilote Spark

  • Pour l'insertion dynamique d'une partition, sur les pilotes Spark, MagicCommitProtocol il faut de la mémoire pour stocker les informations de métadonnées de chaque fichier validé jusqu'à ce que la tâche soit validée ou abandonnée. Dans la plupart des tâches, le paramètre de mémoire par défaut du pilote Spark est négligeable.

    Pour les tâches qui ont des tâches de longue durée qui écrivent un grand nombre de fichiers, la mémoire que le protocole de validation consomme peut être perceptible et nécessiter des ajustements de la mémoire allouée pour Spark, en particulier pour les exécuteurs Spark. Vous pouvez régler la mémoire à l'aide de la propriété spark.driver.memory pour les pilotes Spark et de la propriété spark.executor.memory pour les exécuteurs Spark. À titre indicatif, une seule tâche d'écriture de 100 000 fichiers nécessite généralement 200 Mo de mémoire supplémentaires. Pour plus d'informations, consultez Propriétés d'applications dans la Documentation de configuration Apache Spark.