Apache Spark: la définition d'instances d'exécuteur ne modifie pas les exécuteurs
J'ai un Apache Spark application en cours d'exécution sur un FIL de cluster (étincelle a 3 nœuds sur ce cluster) sur le mode cluster.
Lorsque l'application est en cours d'exécution l'Étincelle de l'INTERFACE utilisateur montre que 2 exécuteurs testamentaires (chaque cours d'exécution sur un autre nœud) et le pilote sont en cours d'exécution sur le troisième nœud.
Je veux que l'application à utiliser plusieurs exécuteurs donc j'ai essayé d'ajouter l'argument-num-exécuteurs testamentaires de bougies de présenter et de définir à 6.
spark-submit --driver-memory 3G --num-executors 6 --class main.Application --executor-memory 11G --master yarn-cluster myJar.jar <arg1> <arg2> <arg3> ...
Toutefois, le nombre d'exécuteurs reste 2.
Sur l'étincelle de l'INTERFACE utilisateur, je peux voir que le paramètre de l'étincelle.exécuteur testamentaire.occurrences est 6, juste comme je l'ai prévu, et en quelque sorte il n'y a que 2 exécuteurs.
J'ai même essayé de réglage de ce paramètre à partir du code
sparkConf.set("spark.executor.instances", "6")
Encore une fois, je peux voir que le paramètre a été fixé à 6, mais il ya encore seulement 2 exécuteurs.
Personne ne sait pourquoi je ne pouvais pas augmenter le nombre de mes exécuteurs testamentaires?
fil.nodemanager.de la ressource.mémoire-mo est 12g dans yarn-site.xml
source d'informationauteur user4688877
Vous devez vous connecter pour publier un commentaire.
Augmentation
yarn.nodemanager.resource.memory-mb
dansyarn-site.xml
Avec 12g par nœud, vous pouvez seulement pilote de lancement(3g) et 2 exécuteurs testamentaires(11g).
Node1 - pilote 3g (+7% de frais généraux)
Node2 - executor1 11g (+7% de frais généraux)
Nœud3 - executor2 11g (+7% de frais généraux)
maintenant que vous demandez pour executor3 de 11g et aucun nœud n'a 11g de mémoire disponible.
pour les 7% de frais généraux consulter étincelle.de fil.exécuteur testamentaire.memoryOverhead et d'étincelles.de fil.le pilote.memoryOverhead dans https://spark.apache.org/docs/1.2.0/running-on-yarn.html
Noter que
yarn.nodemanager.resource.memory-mb
est total mémoire qu'un unique NodeManager peut allouer à travers tous conteneurs sur un nœud.Dans ton cas, puisque
yarn.nodemanager.resource.memory-mb = 12G
si vous ajoutez de la mémoire allouée à tous les FILS de conteneurs sur un seul nœud, elle ne peut dépasser 12G.Vous avez demandé 11G (
-executor-memory 11G
) pour chaque Étincelle Exécuteur conteneur. Si 11G est inférieur à 12G, cela ne fonctionne toujours pas. Pourquoi ?spark.yarn.executor.memoryOverhead
qui estmin(executorMemory * 0.10, 384)
(par par défautsauf si vous la remplacez).À la suite de mathématiques doit être vrai:
spark.executor.memory
+spark.yarn.executor.memoryOverhead
<=yarn.nodemanager.resource.memory-mb
Voir: https://spark.apache.org/docs/latest/running-on-yarn.html pour la documentation la plus récente sur
spark.yarn.executor.memoryOverhead
En outre,
spark.executor.instances
est simplement une demande. Spark ApplicationMaster pour votre application va faire une demande à FIL ResourceManager pour le nombre de conteneurs =spark.executor.instances
. La demande sera accordée par ResourceManager sur NodeManager nœud basée sur:yarn.nodemanager.resource.memory-mb
seuil n'a pas été dépassé sur le nœud:spark.executor.memory
+spark.yarn.executor.memoryOverhead
)) <=yarn.nodemanager.resource.memory-mb
*Si la demande n'est pas accordée, demande sera mis en file d'attente et accordée lorsque les conditions précitées sont remplies.
Vous n'avez qu'à 3 nœuds dans le cluster, et celui-ci sera utilisé en tant que conducteur, vous n'avez que 2 noeuds à gauche, comment pouvez-vous créer 6 exécuteurs?
Je pense que vous avez confondu
--num-executors
avec--executor-cores
.À l'augmentation de la concurrence, vous avez besoin de plus de cœurs, vous souhaitez utiliser tous les Processeurs dans votre cluster.
D'utiliser l'étincelle de cluster à sa pleine capacité dont vous avez besoin pour définir les valeurs de --num exécuteurs testamentaires, --exécuteur cœurs et --exécuteur-mémoire par votre cluster.
--Num exécuteurs testamentaires indicateur de ligne de commande ou une étincelle.exécuteur testamentaire.les instances de configuration de contrôle de propriété le nombre d'exécuteurs demandé.
--Exécuteur des noyaux indicateur de ligne de commande ou une étincelle.exécuteur testamentaire.les carottes de la configuration de la propriété contrôle le nombre de tâches simultanées d'un exécuteur testamentaire peut s'exécuter.
--Exécuteur-mémoire indicateur de ligne de commande ou une étincelle.exécuteur testamentaire.configuration de la mémoire de la propriété contrôle la taille du tas.