Apache Spark a récemment mis à jour la version 0.8.1, dans laquelle le mode yarn-client
Est disponible. Ma question est la suivante: que signifie réellement le mode client-fil? Dans la documentation, dit:
Avec le mode client-fil, l'application sera lancée localement. Tout comme l'exécution d'une application ou d'un shell-spark en mode Local/Mesos/Standalone. La méthode de lancement est également similaire avec ceux-ci, assurez-vous simplement que lorsque vous devez spécifier une URL principale, utilisez "yarn-client" à la place.
Que signifie "lancé localement"? Localement où? Sur le cluster Spark?
Quelle est la différence spécifique par rapport au mode autonome?
Une application Spark comprend un pilote et un ou plusieurs exécuteurs. Le programme pilote est le programme principal (où vous instanciez SparkContext
), qui coordonne les exécuteurs pour exécuter l’application Spark. Les exécuteurs exécutent les tâches assignées par le pilote.
Une application YARN joue les rôles suivants: client de fil, maître d’application de fil et liste des conteneurs exécutés sur les gestionnaires de nœuds.
Lorsque l'application Spark s'exécute sur YARN, elle possède sa propre implémentation de client de fil et de maître d'application de fil.
Avec ces antécédents, la principale différence réside dans l'emplacement du programme du pilote.
Référence: http://spark.incubator.Apache.org/docs/latest/cluster-overview.html
Ainsi, dans spark, vous avez deux composants différents. Il y a le pilote et les ouvriers. En mode grappe de fils, le pilote s'exécute à distance sur un nœud de données et les ouvriers s'exécutent sur des nœuds de données distincts. En mode client, le pilote se trouve sur la machine qui a démarré le travail et les travailleurs sur les nœuds de données, tandis qu'en mode local, le pilote et les travailleurs se trouvent sur la machine qui a démarré le travail.
Lorsque vous exécutez .collect (), les données des nœuds de travail sont extraites dans le pilote. C'est essentiellement là que se passe le traitement final.
Pour moi-même, j’ai trouvé que le mode grappe de fils était préférable lorsque je suis à la maison sur un vpn, mais le mode client-fil est préférable lorsque je lance du code à partir du centre de données.
Le mode client-fil signifie également que vous attachez un nœud de travailleur en moins pour le pilote.
spark et le fil sont des structures distribuées, mais leurs rôles sont différents:
Le filé est un cadre de gestion des ressources. Pour chaque application, il a les rôles suivants:
ApplicationMaster: gestion des ressources d'une seule application, y compris demande/libération de ressource de Yarn pour l'application et le moniteur.
Tentative: une tentative est simplement un processus normal qui fait partie du travail de l'application. Par exemple, un travail mapreduce composé de plusieurs mappeurs et réducteurs, chaque mappeur et chaque réducteur constituant une tentative.
Un processus courant pour sommiter une application sur un fil est le suivant:
Le client soumet la demande d’application au fil. Dans la demande, Yarn doit connaître la classe ApplicationMaster. Pour SparkApplication, il s'agit de org.Apache.spark.deploy.yarn.ApplicationMaster
, pour le travail MapReduce, il s’agit de org.Apache.hadoop.mapreduce.v2.app.MRAppMaster
.
Yarn alloue des ressources pour le processus ApplicationMaster et démarre le processus ApplicationMaster dans l'un des nœuds du cluster;
Après le démarrage d'ApplicationMaster, ApplicationMaster demandera une ressource à Yarn pour cette application et démarrera l'agent;
Pour Spark, l'infrastructure informatique distribuée, un travail informatique est divisé en plusieurs petites tâches. Chaque exécuteur est responsable de chaque tâche. Le pilote collecte le résultat de toutes les tâches de l'exécuteur et obtient un résultat global. Une application spark) ne comporte qu'un seul pilote avec plusieurs exécuteurs.
Le problème survient donc lorsque Spark utilise Yarn en tant qu’outil de gestion des ressources dans un cluster:
En mode grappe de fils, Spark, le client soumettra spark application au fil, les deux Spark Pilote et Spark Les exécuteurs sont sous la surveillance du fil. Dans la perspective du fil, Spark Pilote et Spark L'exécuteur n'a aucune différence, mais normal Java, à savoir un processus de travail d’application. Ainsi, lorsque le processus client est terminé, par exemple si le processus client est arrêté ou tué, l’application Spark sur fil est toujours en cours d’exécution.
En mode client filé, seuls les exécuteurs Spark sont sous le
surveillance du fil. Yarn ApplicationMaster demandera une ressource pour seulement spark exécuteur. Le programme du pilote s'exécute dans le processus client qui n'a rien à voir avec le fil. Il s'agit simplement d'un processus qui soumet une application à yarn.So, lorsque le client partir, par exemple le client
processus se termine, le pilote est arrêté et l’informatique est terminée.
Avec le mode client-fil, votre application spark est exécutée sur votre machine locale. Avec le mode autonome ", votre application spark sera envoyée à ResourceManager de YARN en tant que yarn ApplicationMaster et votre application s'exécute dans un nœud de fil dans lequel ApplicationMaster est exécuté. Dans les deux cas, yarn sert de gestionnaire de grappes spark. Votre application (SparkContext) envoie des tâches à yarn.
Tout d'abord, expliquons quelle est la différence entre exécuter Spark en mode autonome et exécuter Spark sur un gestionnaire de cluster (Mesos ou YARN).
Lorsque vous exécutez Spark en mode autonome, vous avez:
Alors:
Lorsque vous utilisez un gestionnaire de cluster (je vais décrire pour YARN le cas le plus courant), vous avez:
Notez qu'il existe 2 modes dans ce cas: cluster-mode
et client-mode
. En mode client, qui est celui que vous avez mentionné:
Donc, revenons à vos questions:
Que signifie "lancé localement"? Localement où? Sur le cluster Spark?
Localement signifie sur le serveur sur lequel vous exécutez la commande (ce qui pourrait être un spark-submit
ou un spark-Shell
). Cela signifie que vous pouvez éventuellement l'exécuter sur le nœud maître du cluster ou sur un serveur situé en dehors du cluster (votre ordinateur portable, par exemple), à condition que la configuration appropriée soit en place, de sorte que ce serveur puisse communiquer avec le cluster et vice versa.
Quelle est la différence spécifique par rapport au mode autonome?
Comme décrit ci-dessus, la différence est que dans le mode autonome, il n'y a pas du tout de gestionnaire de cluster. Une analyse plus élaborée et une catégorisation de toutes les différences de manière concrète pour chaque mode sont disponibles dans ce article .