La doc https://spark.Apache.org/docs/1.1.0/submitting-applications.html
décrit le mode de déploiement comme suit:
--deploy-mode: Whether to deploy your driver on the worker nodes (cluster) or locally as an external client (client) (default: client)
En utilisant ce diagramme fig1
comme guide (extrait de http://spark.Apache.org/docs/1.2.0/cluster-overview.html ):
Si je lance un travail Spark:
./bin/spark-submit \
--class com.driver \
--master spark://MY_MASTER:7077 \
--executor-memory 845M \
--deploy-mode client \
./bin/Driver.jar
Alors le Driver Program
sera MY_MASTER
comme spécifié dans fig1
MY_MASTER
Si à la place j'utilise --deploy-mode cluster
, alors le Driver Program
sera partagé entre les nœuds de travail? Si cela est vrai, cela signifie-t-il que la zone Driver Program
de fig1
peut être supprimée (car elle n'est plus utilisée), car la SparkContext
sera également partagée entre les nœuds de travail?
Quelles conditions utiliser cluster
au lieu de client
?
Non, lorsque le mode de déploiement est client
, le programme de pilote n'est pas nécessairement le nœud maître. Vous pouvez exécuter spark-submit sur votre ordinateur portable et le programme de pilote sur votre ordinateur portable.
Au contraire, lorsque le mode de déploiement est cluster
, le gestionnaire de cluster (nœud maître) est utilisé pour rechercher un esclave disposant de suffisamment de ressources pour exécuter le programme de pilotes. En conséquence, le programme de pilote s’exécuterait sur l’un des nœuds esclaves. Comme son exécution est déléguée, vous ne pouvez pas obtenir le résultat du programme pilote, celui-ci doit stocker ses résultats dans un fichier, une base de données, etc.
Je pense que cela peut vous aider à comprendre. Dans le document https://spark.Apache.org/docs/latest/submitting-applications.html Il est indiqué "Une stratégie de déploiement commune consiste à soumettre votre candidature à partir de une machine passerelle physiquement située au même endroit que vos machines de travail (par exemple, un noeud maître dans un cluster EC2 autonome). Dans cette configuration, le mode client est approprié. En mode client, le pilote est lancé directement dans le processus d'envoi par étincelle qui agit en tant que client du cluster. L'entrée et la sortie de l'application sont rattachées à la console. Ce mode est donc particulièrement adapté aux applications impliquant le REPL (par exemple, Spark Shell).
Si votre application est soumise depuis une machine éloignée des machines subordonnées (par exemple, localement sur votre ordinateur portable), il est courant d’utiliser le mode cluster pour réduire au minimum la latence du réseau entre les pilotes et les exécuteurs. Notez que le mode cluster n'est actuellement pas pris en charge pour les clusters Mesos ou les applications Python. "
Qu'en est-il de la HADR?