web-dev-qa-db-fra.com

Spark Driver dans Apache Spark

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)

48
user3789843

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:

  • Le pilote prépare le contexte et déclare les opérations sur les données à l'aide de transformations et d'actions RDD.
  • Le pilote envoie le graphe RDD sérialisé au maître. Le maître crée des tâches et les soumet aux ouvriers pour exécution. Il coordonne les différentes étapes du travail.
  • Les travailleurs sont où les tâches sont réellement exécutées. Ils doivent disposer des ressources et de la connectivité réseau nécessaires pour exécuter les opérations demandées sur les RDD. 
119
maasg

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:

  1. La cmd demandera à yarn Resource Manager (RM) de démarrer un processus ApplicationMaster (AM) sur l’un de vos ordinateurs en cluster (un gestionnaire de nœuds de fil y a été installé).
  2. Une fois le matin démarré, il appelle la méthode principale de votre programme de pilote. Donc, le pilote est en fait l'endroit où vous définissez votre contexte d'étincelle, votre RDD et vos travaux. Le pilote contient la méthode principale d’entrée qui démarre le calcul de l’étincelle. 
  3. Le contexte d'étincelle préparera le point de terminaison RPC pour que l'exécuteur réponde, et bien d'autres choses (mémoire, gestionnaire de bloc de disque, serveur de jetée, etc.).
  4. L'AM demandera à RM pour les conteneurs d'exécuter vos exécuteurs d'étincelle, avec l'URL RPC du pilote (quelque chose comme spark: // CoarseGrainedScheduler @ ip: 37444) spécifiée dans la cmd de démarrage de l'exécuteur.

La boîte jaune "Contexte Spark" est le pilote .  Yarn cluster mode

6
fjolt

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.

5
nitesh

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.

3
Prashant_M

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"

1
flyhighzy

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 

  1. Accès à la CPU/à la mémoire d’une fois le nœud sur le cluster, ce qui est utile dans la mesure où le nœud du cluster sera volumineux en termes de mémoire.
  2. Les journaux de pilotes se trouvent sur le nœud de cluster par rapport à la zone locale à partir de laquelle le travail a été soumis.
  3. Vous devez avoir un serveur d’historique pour le mode cluster, car les autres journaux du côté du pilote sont perdus.
  4. Il est parfois difficile d’installer l’exécuteur de dépendance (c’est-à-dire une dépendance native) et d’appliquer une application spark en mode client.

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 

0
Ashkrit Sharma