2016-07-11 3 views
-2

Je viens de créer un cluster d'étincelles à 7 nœuds, chaque travailleur disposant de 8 Go de mémoire et de 4 cœurs. Ce n'est pas un énorme cluster, mais échoue avec "limite de surcharge de GC dépassé" pour seulement 10 Go de données pour un terasort simple.Databricks fournit-il des paramètres d'étincelles recommandés pour un cluster et un ensemble de données donnés?

Je veux savoir comment je décide de ces paramètres de base pour un cluster spark de sorte que le travail n'échoue pas à mesure que la taille des données augmente.

  1. num de exécuteurs
  2. num de partitions
  3. parallélisme
  4. noyaux exécuteur
  5. exécuteur testamentaire de mémoire

Je ne me dérange travail en cours d'exécution lent si pas configuré correctement, mais les processus mourir à cause du manque de mémoire est un grand drapeau rouge.

Répondre

0

Certaines informations comme la version d'étincelle, le format d'entrée (texte, parquet, orc), la compression, etc. seraient certainement utiles.

Mais en résumé, ce qui suit est généralement la règle du pouce.

  1. num-executors - C'est le nombre total d'exécuteurs que tout le cluster va consacrer à ce travail. L'exécuteur peut contenir une ou plusieurs tâches. On aurait tendance à penser un nœud = un exécuteur. Il est préférable d'avoir plus d'un exécuteur par nœud. Plus à ce sujet plus tard dans la réponse. Executor-cores - C'est le nombre total de cœurs (tâches) par exécuteur. Dans votre cas, le point de départ est de 4 cœurs par exécuteur (c'est-à-dire par nœud). Executor-memory - Mémoire totale par exécuteur. Ceci est partagé par toutes les tâches ou les cœurs dans l'exécuteur.

configuration la plus probable (mais moins efficace) num-exécuteurs = 7, exécuteur noyaux = 4, exécuteur mémoire = 8g Dans ce cas, un exécuteur est partagé par 4 tâches. Si l'un d'entre eux échoue, l'exécuteur complet est marqué comme ayant échoué.

meilleure configuration num-exécuteurs = 14 (2 par noeud), un exécuteur noyaux = 2 (2 par exécuteur), l'exécuteur mémoire = 3g (3g par exécuteur, laissant 2g pour le reste du processus)

Veuillez noter que 1 core par executor n'est pas bon car le temps de démarrage de l'exécuteur peut être trop important dans ce cas.

Dans ce cas, vous divisez les ressources pour éviter de tuer l'exécuteur entier.

Parallélisme Cela dépend du format de vos données d'entrée.