Partage 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 obtenir de meilleures performances sur Azure HDInsight.

Vue d’ensemble

Spark fonctionne en plaçant les données en mémoire. La gestion des ressources en 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.
  • Utilisez la sérialisation Kryo data serialization, plus récente et plus efficace, au lieu de 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, la plateforme 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.

YARN Spark Memory Management.

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.
  • Privilégiez ReduceByKey (avec sa limite de mémoire fixe) à GroupByKey, qui fournit des agrégations, le fenêtrage et d’autres fonctions, mais qui n’a pas de limite de mémoire.
  • 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 des 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 supplémentaires de résolution des problèmes, consultez Exceptions OutOfMemoryError pour Apache Spark dans Azure HDInsight.

Étapes suivantes