web-dev-qa-db-fra.com

Quelles conditions faut-il utiliser le mode de déploiement de cluster au lieu de client?

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 ): 

enter image description here

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 fig1MY_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?

47
blue-sky

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.

  • Mode client
    • Voulez-vous obtenir un résultat d'emploi (analyse dynamique)
    • Plus facile pour le développement/débogage
    • Contrôlez l'emplacement de votre programme de pilotes
    • Application toujours active: exposez votre programme de lancement de travaux Spark en tant que service REST ou Web UI
  • Mode cluster
    • Plus facile pour l'allocation des ressources (laissez le maître décider): tirez et oubliez
    • Surveillez votre programme de conduite à partir de l'interface utilisateur Web principale comme les autres travailleurs
    • Arrêter à la fin: un travail est terminé, les ressources allouées sont libérées
89
G Quintana

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. "

5
ruoshui1126

Qu'en est-il de la HADR?

  • En mode cluster, YARN redémarre le pilote sans tuer les exécuteurs.
  • En mode client, YARN tue automatiquement tous les exécuteurs si votre pilote est tué.
0
faraz waseem