J'ai déjà un cluster de 3 machines (ubuntu1, ubuntu2, ubuntu3 de VM virtualbox) exécutant Hadoop 1.0.0. J'ai installé spark sur chacune de ces machines. ub1 est mon noeud maître et les autres noeuds travaillent comme esclave. Ma question est ce qui est exactement un pilote d'étincelle? et devrions-nous définir une adresse IP et un port pour déclencher le pilote avec spark.driver.Host
et où il sera exécuté et situé? (maître ou esclave)
Le pilote d'étincelle est le programme qui déclare les transformations et les actions sur les RDD de données et soumet ces demandes au maître.
Concrètement, le pilote est le programme qui crée le SparkContext, en se connectant à un maître Spark donné. Dans le cas d’un cluster local, comme dans votre cas, le master_url=spark://<Host>:<port>
Son emplacement est indépendant du maître/esclaves. Vous pouvez co-localiser avec le maître ou l'exécuter à partir d'un autre nœud. La seule exigence est que/ doit être dans un réseau adressable à partir des travailleurs Spark.
Voici comment se présente la configuration de votre pilote:
val conf = new SparkConf()
.setMaster("master_url") // this is where the master is specified
.setAppName("SparkExamplesMinimal")
.set("spark.local.ip","xx.xx.xx.xx") // helps when multiple network interfaces are present. The driver must be in the same network as the master and slaves
.set("spark.driver.Host","xx.xx.xx.xx") // same as above. This duality might disappear in a future version
val sc = new spark.SparkContext(conf)
// etc...
Pour expliquer un peu plus sur les différents rôles:
Votre question concerne l’étincelle déployée sur le fil, voir 1 : http://spark.Apache.org/docs/latest/running-on-yarn.html "Exécution de Spark on YARN"
Supposons que vous démarrez à partir d'un spark-submit --master yarn
cmd:
Un pilote Spark est le processus qui crée et possède une instance de SparkContext. C'est votre application Spark qui lance la méthode principale dans laquelle l'instance de SparkContext est Créée. C'est le cockpit de l'exécution des tâches et des tâches (avec DAGScheduler et Task Scheduler). Il héberge l'interface utilisateur Web pour l'environnement
Il divise une application Spark en tâches et les planifie pour qu'elles s'exécutent sur des exécuteurs . Un pilote est l'endroit où le planificateur de tâches vit et génère des tâches sur plusieurs travailleurs . Un pilote coordonne les travailleurs et l'exécution globale des tâches.
En termes simples, le pilote Spark est un programme qui contient la méthode principale (la méthode principale est le point de départ de votre programme). Ainsi, en Java, le pilote sera la classe qui contiendra le public void static (String args []).
Dans un cluster, vous pouvez exécuter ce programme de l’une des façons suivantes: 1) Sur n’importe quel ordinateur hôte distant. Ici, vous devrez fournir les détails de la machine hôte distante lors de la soumission du programme de pilote à l'hôte distant. Le pilote s'exécute dans le processus JVM créé sur une machine distante et ne renvoie que le résultat final.
2) Localement depuis votre machine cliente (votre ordinateur portable). Ici, le programme de pilote s’exécute dans le processus JVM créé localement sur votre machine. De là, il envoie la tâche aux hôtes distants et attend le résultat de chaque tâche.
Si vous définissez config "spark.deploy.mode = cluster", votre pilote sera lancé sur vos hôtes de travail (ubuntu2 ou ubuntu3).
Si spark.deploy.mode = driver, qui est la valeur par défaut, il s'exécutera sur la machine où vous envoyez votre application.
Enfin, vous pouvez voir votre application sur l'interface Web: http: // driverhost: driver_ui_port , où driver_ui_port correspond à 4040 par défaut et vous pouvez modifier le port en définissant config "spark.ui.port"
Le pilote Spark est le noeud qui permet à l'application de créer SparkContext, sparkcontext est la connexion avec la ressource de calcul ..___. Le pilote peut maintenant exécuter la boîte soumise ou sur l'un des noeuds du cluster lors de l'utilisation d'un gestionnaire de ressources tel que YARN.
Les deux options client/cluster ont un compromis comme
Si vous voulez en savoir plus sur l'anatomie de Spark Job, alors http://ashkrit.blogspot.com/2018/09/anatomy-of-Apache-spark-job.html post pourrait être utile