Partager via


Optimisation de l’utilisation de la mémoire pour Apache Spark

Cet article explique comment optimiser la gestion de la mémoire de votre cluster Apache Spark pour optimiser les performances sur Azure HDInsight.

Aperçu

Spark fonctionne en plaçant des données en mémoire. La gestion des ressources de mémoire est donc un aspect clé de l’optimisation de l’exécution des travaux Spark. Vous pouvez appliquer plusieurs techniques pour utiliser efficacement la mémoire de votre cluster.

  • Privilégiez les partitions de données de petite taille, et prenez en compte la taille, les types et la distribution des données dans votre stratégie de partitionnement.
  • Considérez les versions plus récentes, plus efficaces Kryo data serialization, plutôt que la sérialisation Java par défaut.
  • Privilégiez l’utilisation de YARN, car il sépare spark-submit en lot.
  • Surveillez et affinez les paramètres de configuration de Spark.

Pour référence, la structure de la mémoire Spark et certains des principaux paramètres mémoire de l’exécuteur sont illustrés dans l’image suivante.

Considérations relatives à la mémoire Spark

Si vous utilisez Apache Hadoop YARN, YARN contrôle la mémoire utilisée par tous les conteneurs sur chaque nœud Spark. Le diagramme suivant montre les objets clés et leurs relations.

Gestion de la mémoire Spark avec YARN.

Pour éviter les messages « Mémoire insuffisante », essayez les solutions suivantes :

  • Passez en revue les lectures aléatoires de gestion DAG. Réduisez par la réduction côté mappage, prépartitionnez (ou compartimentez) les données sources, optimisez les lectures aléatoires uniques, et réduisez la quantité de données envoyées.
  • Il est préférable de choisir ReduceByKey avec sa limite de mémoire fixe à GroupByKey, qui fournit des agrégations, des fenêtres et d'autres fonctions, mais possède une limite de mémoire non bornée.
  • Privilégiez TreeReduce, qui effectue plus de travail sur les partitions ou les exécuteurs, à Reduce, qui effectue tout le travail sur le pilote.
  • Utilisez des DataFrames plutôt que les objets RDD de niveau inférieur.
  • Créez des ComplexTypes qui encapsulent des actions, telles que « N premiers », différentes agrégations ou opérations de fenêtrage.

Pour obtenir des étapes de dépannage supplémentaires, consultez les exceptions OutOfMemoryError pour Apache Spark dans Azure HDInsight.

Étapes suivantes