40 votes

Apache Spark: Différences entre les modes de déploiement client et cluster

TL;DR: Dans une Étincelle Autonome cluster, quelles sont les différences entre le client et le cluster de déployer des modes? Comment puis-je régler le mode mon application va s'exécuter sur?


Nous avons une Étincelle Autonome cluster avec trois machines, toutes avec Spark 1.6.1:

  • Un maître de la machine, qui est aussi là que notre application est exécutée à l'aide de spark-submit
  • 2 identiques travailleur machines

À partir de l' Étincelle de la Documentation, j'ai lu:

(...) Pour les clusters, l'Étincelle prend actuellement en charge les deux déployer des modes. En mode client, le pilote est lancé dans le même processus que le client qui fait la demande. En mode cluster, cependant, le pilote est lancé à partir de l'un des processus de travail à l'intérieur du cluster, et le client, le processus s'arrête dès qu'il s'acquitte de sa responsabilité de dépôt de la demande, sans attendre l'application de la finition.

Cependant, je ne comprends pas vraiment les différences pratiques par cette lecture, et je ne comprends pas quels sont les avantages et les inconvénients des différentes déployer des modes.

De plus, lorsque je démarre mon application en utilisant les start-se soumettre, même si j'ai mis la propriété spark.submit.deployMode de "cluster", l'Étincelle de l'INTERFACE utilisateur pour mon contexte affiche l'entrée suivante:

Context UI

Je ne suis donc pas en mesure de tester les deux modes pour voir les différences pratiques. Cela dit, mes questions sont les suivantes:

1) Quelles sont les différences concrètes entre Étincelle Autonome client déployer mode et du cluster de déployer mode? Quels sont les avantages et les inconvénients de l'utilisation de chacun?

2) Comment puis-je choisir celui que ma demande va être en cours d'exécution, à l'aide d' spark-submit?

69voto

Yuval Itzchakov Points 13820

Quelles sont les différences concrètes entre Étincelle client Autonome déployer en mode cluster et à déployer mode? Quels sont les avantages et les inconvénients de l'utilisation de chacun?

Nous allons essayer de regarder les différences entre le client et le mode de groupe.

Client:

  • Le pilote s'exécute sur un serveur dédié (nœud Maître) à l'intérieur d'un processus dédié. Cela signifie qu'il a toutes les ressources disponibles à sa disposition pour l'exécution de travaux.
  • Le pilote ouvre un dédié Netty serveur HTTP et distribue les fichiers JAR spécifié pour tous les nœuds du Travailleur (gros avantage).
  • Parce que le nœud Maître a consacré des ressources de son propre, vous n'avez pas besoin de "passer" le travailleur de ressources pour le programme Pilote.
  • Si le pilote de processus meurt, vous besoin d'un système de surveillance afin de réinitialiser l'exécution.

Cluster:

  • Le pilote s'exécute sur l'un des clusters de nœuds de travail. Le travailleur est choisi par le Maître chef
  • Le pilote s'exécute comme un processus autonome à l'intérieur du Travailleur.
  • Programmes de conducteur prend au moins 1 de base et d'une quantité de mémoire de l'un des travailleurs (ce peut être configuré).
  • Programme de pilote peut être contrôlé à partir du nœud Maître à l'aide de l' --supervise drapeau et être réinitialisé dans le cas où il meurt.
  • Lorsque vous travaillez en mode Cluster, tous les Pots liées à l'exécution de votre application doivent être accessibles à tous les travailleurs. Cela signifie que vous pouvez soit manuellement, placez-les dans une commune ou dans un dossier pour chacun des travailleurs.

Lequel est le mieux? Pas sûr, c'est en fait pour vous d'expérimenter et de décider. Ce n'est pas de prendre des décisions mieux ici, vous gagnez des choses à partir de la première et de l'arrière, c'est à vous de voir celui qui fonctionne le mieux pour votre cas d'utilisation.

Comment puis-je choisir celui que ma demande va être exécuté, à l'aide de spark-submit

La façon de choisir le mode d'exécution est par l'utilisation de l' --deploy-mode drapeau. À partir de l' Étincelle de Configuration de la page:

/bin/spark-submit \
  --class <main-class>
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  --conf <key>=<value> \
  ... # other options
  <application-jar> \
  [application-arguments]

6voto

Suman Sushovan Points 81

Disons que vous allez effectuer une étincelle de présenter dans le DME en faisant SSH vers le nœud maître. Si vous êtes offrant l'option --déployer en mode cluster, puis après les choses se passent.

  1. Vous ne serez pas en mesure de voir les journaux détaillés dans le terminal.
  2. Depuis le pilote n'est pas créé dans le Maître lui-même, vous ne serez pas en mesure de terminer le travail à partir du terminal.

Mais dans le cas d' --déployer en mode client:

  1. Vous serez en mesure de voir les journaux détaillés dans le terminal.
  2. Vous serez en mesure de mettre fin à l'emploi du terminal lui-même.

Ce sont les choses de base que j'ai remarqué jusqu'à maintenant.

0voto

jeevan kishore Points 36

Je suis aussi le même scénario, ici nœud maître utilisation autonome ec2 cluster. Dans cette configuration client de mode est adéquat. Dans ce pilote est lancé directement dans l'étincelle soumettre processus qui agit comme un client pour le cluster. L'Entrée et la sortie de l'application est connectée à la console.Ainsi, ce mode est particulièrement adapté pour les applications qui impliquent REPL.

Sinon, si votre demande est présentée à partir d'une machine de mesure de la travailleuse machines puis il est assez courant d'utiliser le mode cluster afin de minimiser la latence du réseau b/w conducteur et exécuteur testamentaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X