View a markdown version of this page

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 elle 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 l'FileCommitProtocolécriture de fichiers avec EMR Spark sur Amazon S3 lors de l'utilisation du système de fichiers S3A. Ce protocole vise à améliorer les performances des applications en évitant d'utiliser des opérations de changement de nom 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 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 remplacement dynamiques, les fichiers écrits par tentative 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, exportez les métadonnées de validation vers le pilote Spark lors de l'appel de validation de la tâche.

Permettant MagicCommitProtocol

Elle MagicCommitProtocol est activée par défaut pour Spark s'exécutant 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 fichiers 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 unSparkConf, en le passant en tant que --conf paramètre dans le shell Spark ou dans spark-submit les spark-sql outils Spark, ou dansconf/spark-defaults.conf. Pour plus d'informations, consultez la section Configuration de Spark dans la documentation d'Apache Spark.

    L'exemple suivant montre comment 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 les exécuteurs d'insertion de partition statique, on Spark MagicCommitProtocol consomme une petite quantité de mémoire pour chaque fichier écrit lors d'une tentative de tâche 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 de partitions, 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.