J'ai lu Présentation du mode cluster et je ne comprends toujours pas les différents processus dans le cluster Spark Standalone et le parallélisme.
Le travailleur est-il un processus JVM ou non? J'ai couru le bin\start-slave.sh
et j'ai découvert qu'il engendrait le travailleur, qui est en fait une machine virtuelle Java.
Selon le lien ci-dessus, un exécuteur est un processus lancé pour une application sur un nœud de travail qui exécute des tâches. Un exécuteur est également une machine virtuelle Java.
Ce sont mes questions:
Les exécuteurs sont par application. Alors quel est le rôle d'un travailleur? Coordonne-t-il avec l'exécuteur testamentaire et communique-t-il le résultat au conducteur? Ou le conducteur parle-t-il directement à l'exécuteur testamentaire? Si oui, quel est le but du travailleur alors?
Comment contrôler le nombre d'exécuteurs pour une application?
Les tâches peuvent-elles être exécutées en parallèle à l'intérieur de l'exécuteur? Si oui, comment configurer le nombre de threads pour un exécuteur?
Quelle est la relation entre un travailleur, des exécuteurs et des cœurs d'exécuteur (--total-executor-cores)?
Que signifie avoir plus de travailleurs par nœud?
Actualisé
Prenons des exemples pour mieux comprendre.
Exemple 1: Un cluster autonome avec 5 nœuds de travail (chaque nœud ayant 8 cœurs) Lorsque je démarre une application avec des paramètres par défaut.
Exemple 2 Même configuration de cluster que l'exemple 1, mais j'exécute une application avec les paramètres suivants --executor-cores 10 --total-executor-cores 10.
Exemple 3 Même configuration de cluster que l'exemple 1, mais j'exécute une application avec les paramètres suivants --executor-cores 10 --total-executor-cores 50.
Exemple 4 Même configuration de cluster que l'exemple 1, mais j'exécute une application avec les paramètres suivants --executor-cores 50 --total-executor-cores 50.
Exemple 5 Même configuration de cluster que l'exemple 1, mais j'exécute une application avec les paramètres suivants --executor-cores 50 --total-executor-cores 10.
Dans chacun de ces exemples, combien d'exécuteurs? Combien de threads par exécuteur testamentaire? Combien de cœurs? Comment le nombre d'exécuteurs testamentaires est-il décidé par demande? Est-ce toujours le même que le nombre de travailleurs?
la source
--num-executors
ne sont plus utilisés dans YARN.Voici comment Apache Spark fonctionne en interne:
la source