Débogage des applications Spark
Je suis en train de déboguer une Application Spark sur un cluster à l'aide d'un maître et plusieurs nœuds de travail. J'ai réussi à mettre en place le nœud maître et les nœuds de travail à l'aide de l'Étincelle autonome gestionnaire de cluster. J'ai téléchargé l'étincelle dossier avec les fichiers binaires et utilisez les commandes suivantes pour l'installation de travailleur et de maître des nœuds. Ces commandes sont exécutées à partir de l'étincelle répertoire.
de commande pour le lancement de maître
./sbin/start-master.sh
de commande pour le lancement de travailleur nœud
./bin/spark-class org.apache.spark.deploy.worker.Worker master-URL
de commande pour la présentation de l'application
./sbin/spark-submit --class Application --master URL ~/app.jar
Maintenant, j'aimerais comprendre le flux de la commande par l'Étincelle de code source sur les nœuds de travail quand je soumettre ma demande(je veux juste utiliser l'un des exemples d'utilisation de réduire()). Je suppose que je devrais le programme d'installation de l'Étincelle sur Eclipse. L'Éclipse de l'installation lien sur Apache Spark site semble être rompu. J'aimerais avoir quelques conseils sur le réglage de l'Allumage et de l'Éclipse pour permettre l'exécution pas à pas d'Étincelle code source sur l'ouvrier nœuds.
Merci!
source d'informationauteur AndroidDev93
Vous devez vous connecter pour publier un commentaire.
Il est important de faire la distinction entre le débogage du programme pilote et le débogage de l'un des exécuteurs testamentaires. Ils requièrent différentes options passées à
spark-submit
Pour le débogage du pilote vous pouvez ajouter les lignes suivantes à votre
spark-submit
de commande. Ensuite, réglez votre débogueur distant de se connecter au nœud que vous avez lancé votre programme de pilote.Dans cet exemple, le port 5005 a été spécifié, mais vous pourriez avoir besoin pour personnaliser que si quelque chose est déjà en cours d'exécution sur ce port.
De la connexion à un exécuteur testamentaire est similaire, ajouter les options suivantes à votre
spark-submit
commande.Remplacer l'adresse avec votre ordinateur local. (C'est une bonne idée de vérifier que vous pouvez accéder à partir de votre étincelle de cluster).
Dans ce cas, démarrez votre débogueur en mode d'écoute, puis démarrez votre étincelle de programme et d'attendre que l'exécuteur testamentaire, à joindre à votre débogueur. Il est important de fixer le nombre des liquidateurs à 1 ou plusieurs liquidateurs seront tous essayez de vous connecter à votre débogueur, susceptibles de causer des problèmes.
Ces exemples sont pour la course avec
sparkMaster
définir commeyarn-client
bien qu'ils peuvent aussi travailler lors de l'exécution en vertu de mesos. Si vous êtes en cours d'exécution à l'aide deyarn-cluster
mode de vous peut-être mis le pilote à joindre à votre débogueur plutôt que de s'attacher votre débogueur pour le conducteur, car vous n'aurez pas nécessairement savoir à l'avance ce nœud le pilote va être en cours d'exécution sur.Vous pouvez exécuter l'Étincelle de l'application en mode local si vous avez juste besoin de déboguer la logique de vos transformations. Cela peut être exécuté dans votre IDE et vous serez en mesure de debug comme toute autre application:
Vous êtes bien sûr de ne pas distribuer le problème avec cette configuration. Distribuer le problème est aussi simple que de changer le maître à point à votre cluster.
Avez-vous essayé de passer de débogage à distance les paramètres des travailleurs de la JVM?
Je pense que c'est quelque chose comme une étincelle.exécuteur testamentaire.extraJavaOptions.
Ensuite, vous devriez être en mesure de se connecter à distance travailleur de la JVM de l'Éclipse.
Voir si cela aide.
https://abrv8.wordpress.com/2014/10/06/debugging-java-spark-applications/
Lorsque vous exécutez une application spark sur le fil, il y a une option de ce genre:
Vous pouvez l'ajouter à
yarn-env.sh
et de débogage à distance sera disponible viaport 5455
.Si vous utilisez étincelle en mode autonome, je crois que cela peut aider:
J'avais suivi les mêmes étapes pour l'installation d'une étincelle autonome de cluster. J'ai été en mesure de déboguer le pilote, maître , travaillé et exécuteur testamentaire de la JVM.
Le maître et l'ouvrier nœud est configuré sur une machine de classe serveur. La machine dispose de 12 cœurs de PROCESSEUR. Le code Source d'Étincelles -2.2.0 a été cloné à partir de l'Étincelle Repo Git.
SUIT:
1] de Commande pour lancer le Maître de la JVM:
Le script shell spark-catégorie est utilisé pour lancer le maître manuellement. Le premier argument est la JVM arguments de lancement du master en mode de débogage. La JVM est suspendu et attend l'IDE de faire une connexion à distance.
Suivantes sont les captures d'écran montrant l'IDE de configuration pour le Débogage à Distance:
2] de Commande pour lancer le Travailleur de la JVM:
Même en tant que maître, le dernier argument spécifie l'adresse de l'étincelle maître. Le port de débogage pour le travailleur est 8788.
Dans le cadre du lancement du travailleur enregistre avec le maître.
Capture d'écran
3] de Base d'Une application java avec une méthode main est compilé et enveloppé dans un uber/gras bocal. Cela a été expliqué dans le texte “étincelle d'apprentissage”. Fondamentalement, un Uber pot contient toutes les dépendances transitives.
Créé en exécutant mvn package dans le répertoire suivant:
Ci-dessus génère un bocal en vertu de l' ./dossier cible
La capture d'écran ci-dessous est l'application java, qui serait soumis à l'Étincelle de Cluster:
4] Commande pour soumettre la commande à l'autonome de cluster
· La commande ci-dessus est à partir du nœud client qui exécute l'application avec la méthode main. Cependant, les transformations sont exécutées sur la distance exécuteur de la JVM.
·
L' –conf paramètres sont importants. Ils sont utilisés pour configurer l'
exécuteur de la JVM.
L'Exécuteur testamentaire, les machines virtuelles sont lancés à l'exécution, par le Travailleur de la JVM.
· * * La première conf paramètre spécifie que l'Exécuteur de la JVM doit
être lancé dans le debug
le mode de suspension, et tout de suite. Il arrive sur le port 8790.
· La deuxième conf paramètre spécifie que l'exécuteur chemin de classe
doit contenir la demande spécifique des pots qui sont soumis à
l'exécuteur testamentaire. Sur une installation distribuée de ces bocaux doivent être déplacés à
l'Exécuteur de la JVM de la machine.
· Le dernier argument est utilisé par le client en application de se connecter à l'
spark master.
À comprendre, comment l'application cliente se connecte à l'Étincelle de cluster,
nous avons besoin de déboguer l'application cliente et l'étape à travers elle. Pour cela nous avons besoin de le configurer pour exécuter en mode de débogage.
Pour déboguer le clientnous devons modifier le script étincelle soumettre comme suit:
Contenu de l'étincelle soumettre
5] une fois que le client inscrit, Le travailleur commence l'exécuteur testamentaire au moment de l'exécution sur un thread différent.
Capture d'écran ci-dessous montre la classe ExecutorRunner.scala
6] Nous avons maintenant se connecter à la fourche exécuteur de la JVM l'aide de l'IDE. Exécuteur de la JVM doit exécuter la transformation des fonctions de notre demande.
7] la transformation de La fonction s'exécute uniquement lorsque l'action “recueillir” sera invoquée.
8] La capture d'écran ci-dessous affiche l'Exécuteur vue, lorsque l'mapToDouble fonction est appelée en parallèle sur plusieurs éléments de la liste. L'Exécuteur de la JVM qui exécute la fonction dans 12 threads qu'il y a 12 cœurs. Comme le nombre de Cœurs n'a pas été définie sur la ligne de commande, le travailleur de la JVM par défaut de l'option: -cores=12.
9] capture d'Écran montrant au client le code soumis [maptodouble()]
cours d'exécution dans la distance fourche Exécuteur de la JVM.
10] une fois que toutes les tâches ont été exécutées, l'Exécuteur de la JVM des sorties. Après l'application cliente de sortie, le travailleur nœud obtient débloqué et attend la prochaine présentation.
Références
https://spark.apache.org/docs/latest/configuration.html
J'ai créé un Blog qui décrit les étapes sur la façon de déboguer ces sous-systèmes. Espérons que cela aide les autres.
Blog qui décrit les étapes à suivre:
https://sandeepmspark.blogspot.com/2018/01/spark-standalone-cluster-internals.html