Supposons pour ce qui suit qu'un seul travail Spark est en cours d'exécution à chaque instant.
Ce que j'obtiens si loin
Voici ce que je comprends de ce qui se passe dans Spark:
- Lors de la création d'un
SparkContext
, chaque nœud de travail démarre un exécuteur. Les exécuteurs sont des processus séparés (JVM), qui se reconnectent au programme pilote. Chaque exécuteur a le pot du programme pilote. Quitter un pilote, arrête les exécuteurs. Chaque exécuteur peut contenir des partitions. - Lorsqu'un travail est exécuté, un plan d'exécution est créé selon le graphe de lignage.
- Le travail d'exécution est divisé en étapes, où des étapes contenant autant de transformations et d'actions voisines (dans le graphe de lignage), mais pas de mélange. Ainsi, les étapes sont séparées par des mélanges.
je comprends que
- Une tâche est une commande envoyée du pilote à un exécuteur en sérialisant l'objet Function.
- L'exécuteur désérialise (avec le pilote jar) la commande (tâche) et l'exécute sur une partition.
mais
Des questions)
Comment diviser la scène en ces tâches?
Plus précisément:
- Les tâches sont-elles déterminées par les transformations et les actions ou peuvent-elles être plusieurs transformations / actions dans une tâche?
- Les tâches sont-elles déterminées par la partition (par exemple, une tâche par étape par partition).
- Les tâches sont-elles déterminées par les nœuds (par exemple, une tâche par étape par nœud)?
Ce que je pense (réponse partielle seulement, même si c'est juste)
Dans https://0x0fff.com/spark-architecture-shuffle , le shuffle est expliqué avec l'image
et j'ai l'impression que la règle est
chaque étape est divisée en tâches # number-of-partitions, sans tenir compte du nombre de nœuds
Pour ma première image, je dirais que j'aurais 3 tâches de carte et 3 tâches de réduction.
Pour l'image de 0x0fff, je dirais qu'il y a 8 tâches de carte et 3 tâches de réduction (en supposant qu'il n'y a que trois fichiers orange et trois fichiers vert foncé).
Questions ouvertes dans tous les cas
Est-ce exact? Mais même si cela est correct, mes questions ci-dessus ne sont pas toutes répondues, car il est toujours ouvert, si plusieurs opérations (par exemple plusieurs cartes) sont dans une tâche ou sont séparées en une tâche par opération.
Ce que disent les autres
Qu'est-ce qu'une tâche dans Spark? Comment le worker Spark exécute-t-il le fichier jar? et Comment le planificateur Apache Spark divise-t-il les fichiers en tâches? sont similaires, mais je n'ai pas l'impression que ma question y trouve une réponse claire.