Spark - Erreur “Un maître de l'URL doit être défini dans votre configuration” lors de la soumission d'une application
J'ai une Étincelle application qui s'exécute sans problème en mode local,mais certains ont des problèmes lors de la soumission à l'Étincelle de cluster.
Le msg d'erreur sont comme suit:
16/06/24 15:42:06 WARN scheduler.TaskSetManager: Lost task 2.0 in stage 0.0 (TID 2, cluster-node-02): java.lang.ExceptionInInitializerError
at GroupEvolutionES$$anonfun$6.apply(GroupEvolutionES.scala:579)
at GroupEvolutionES$$anonfun$6.apply(GroupEvolutionES.scala:579)
at scala.collection.Iterator$$anon$14.hasNext(Iterator.scala:390)
at org.apache.spark.util.Utils$.getIteratorSize(Utils.scala:1595)
at org.apache.spark.rdd.RDD$$anonfun$count$1.apply(RDD.scala:1157)
at org.apache.spark.rdd.RDD$$anonfun$count$1.apply(RDD.scala:1157)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1858)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1858)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)
at org.apache.spark.scheduler.Task.run(Task.scala:89)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.spark.SparkException: A master URL must be set in your configuration
at org.apache.spark.SparkContext.<init>(SparkContext.scala:401)
at GroupEvolutionES$.<init>(GroupEvolutionES.scala:37)
at GroupEvolutionES$.<clinit>(GroupEvolutionES.scala)
... 14 more
16/06/24 15:42:06 WARN scheduler.TaskSetManager: Lost task 5.0 in stage 0.0 (TID 5, cluster-node-02): java.lang.NoClassDefFoundError: Could not initialize class GroupEvolutionES$
at GroupEvolutionES$$anonfun$6.apply(GroupEvolutionES.scala:579)
at GroupEvolutionES$$anonfun$6.apply(GroupEvolutionES.scala:579)
at scala.collection.Iterator$$anon$14.hasNext(Iterator.scala:390)
at org.apache.spark.util.Utils$.getIteratorSize(Utils.scala:1595)
at org.apache.spark.rdd.RDD$$anonfun$count$1.apply(RDD.scala:1157)
at org.apache.spark.rdd.RDD$$anonfun$count$1.apply(RDD.scala:1157)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1858)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1858)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)
at org.apache.spark.scheduler.Task.run(Task.scala:89)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Dans le code ci-dessus, GroupEvolutionES
est la classe principale. Le msg d'erreur dit: "Un maître de l'URL doit être défini dans votre configuration", mais j'ai fourni à l' "--master" paramètre spark-submit
.
Quelqu'un qui sait comment résoudre ce problème?
Spark version: 1.6.1
- Pourriez vous s'il vous plaît coller la commande que vous utilisez pour soumettre le script.
- Avez-vous fourni l'étincelle maître d'URL ?
- spark-soumettre --classe GroupEvolutionES --master spark://cluster de nœuds nn1:7077 --pots $mypath myapp.jar
- Oui.
- Je suis tombé sur ceci dans ma
Spark
du projet unité-tests (DataFrameSuiteBase
). À partir de @Dazzler's réponse, j'ai compris que je dois déplacerDataFrame
-création à l'intérieur detest(..) { .. }
suites. Mais aussi tout simplement déclarantDataFrame
slazy
fixe (l'amourScala
!). Cela a été souligné être @gyuseong dans réponse ci-dessous
Vous devez vous connecter pour publier un commentaire.
Où est le sparkContext objet défini, est-il à l'intérieur de la fonction main?
J'ai moi aussi été confronté au même problème, l'erreur dont je n'ai fait, j'ai lancé le sparkContext en dehors de la fonction principale et à l'intérieur de la classe.
Lorsque j'ai lancé, il à l'intérieur de la fonction main, il a bien fonctionné.
main()
méthode au lieu de l'étendrescala.App
. Les sous-classes descala.App
peut ne pas fonctionner correctement." Spark 2.1.0 ManuelgetOrCreate()
un contexte devrait être créé au niveau du pilote et transmis à l'exécuteur niveau, au besoin.La TLDR:
une liste des options pour le spark.master spark 2.2.1
Je suis tombé sur cette page après avoir essayé d'exécuter une simple Étincelle SQL programme java en mode local. Pour ce faire, j'ai trouvé que je pouvais étincelle.maître à l'aide de:
Une mise à jour de ma réponse:
Pour être clair, ce n'est pas ce que vous devez faire dans un environnement de production. Dans un environnement de production de l'étincelle.master doit être spécifié dans l'un des quelques autres endroits: soit dans $SPARK_HOME/conf/spark-valeurs par défaut.conf (c'est là que cloudera manager, ou sur la ligne de commande lorsque vous soumettez l'application. (ex-spark-soumettre --maître de fil).
Si vous spécifiez une étincelle.maître pour être "locale" de cette façon, l'étincelle va essayer de s'exécuter dans un seul jvm, comme indiqué par les commentaires ci-dessous. Si vous essayez ensuite de spécifier --déployer en mode cluster, vous obtiendrez un message d'erreur " Cluster déployer mode n'est pas compatible avec le master "local"'. C'est parce que la définition d'étincelle.master=local signifie que vous n'êtes PAS en cours d'exécution en mode cluster.
Au lieu de cela, pour une production à l'application, au sein de votre fonction main (ou dans les fonctions appelées par votre fonction principale), vous devez tout simplement utiliser:
Cela permettra d'utiliser les configurations spécifiées sur la ligne de commande/dans les fichiers de config.
Aussi, pour être clair sur ce trop: --master et de "l'étincelle.master" sont exactement les même paramètre, juste spécifié dans différentes manières. Réglage de l'allumage.maître dans le code, comme dans ma réponse ci-dessus, remplace toutes les tentatives pour définir --maître, et remplace les valeurs spark-valeurs par défaut.conf, afin de ne pas le faire dans la production. Son grand pour des tests.
aussi, voir cette réponse.
qui des liens vers une liste des options pour le spark.maître et de ce que chacun en fait.
une liste des options pour le spark.master spark 2.2.1
A fonctionné pour moi après le remplacement de
avec
Trouvé cette solution sur un autre thread sur stackoverflow.
setMaster("local[2]")
(serait agréable d'avoir une explication), mais cette réponse peut être considérée comme la solution à ce problème.La valeur par défaut de "l'étincelle.master" est spark://HOST:PORT, et le code suivant tente d'obtenir une session à partir de la version autonome de cluster est en cours d'exécution à de l'HÔTE:PORT, et s'attend à ce que l'HÔTE:PORT de la valeur à être dans l'étincelle de fichier de config.
"org.apache.spark.SparkException: Un maître de l'URL doit être défini dans votre configuration" les etats qui de l'HÔTE:PORT n'est pas définie dans l'étincelle fichier de configuration.
Pour ne pas embêter sur les valeurs de "HOST:PORT", ensemble étincelle.maître comme local
Ici est le lien pour la liste des formats dans lesquels le maître d'URL peuvent être transmises à l'étincelle.maître
Référence : Spark Tutoriel - Le Programme D'Installation De L'Étincelle De L'Écosystème
Si vous exécutez une application autonome, vous devez utiliser
SparkContext
au lieu deSparkSession
.setMaster("local")
est la clé pour résoudre le problème pour moiComment étincelle contexte dans votre application, sélectionnez la valeur pour le spark master?
SparkConf
lors de la création SC.System.getProperties
(où SparkSubmit plus tôt au lendemain de la lecture de votre--master
argument).Maintenant,
SparkSubmit
fonctionne sur le pilote -- qui dans votre cas est la machine à partir de laquelle vous êtes à l'exécution de laspark-submit
script. Et c'est probablement de travail comme prévu pour vous aussi.Cependant, à partir de l'information que vous avez posté il semble que vous êtes la création d'une étincelle contexte dans le code qui est envoyé à l'exécuteur -- et étant donné qu'il n'est pas
spark.master
système de propriété qui y sont disponibles, il échoue. (Et vous ne devriez pas vraiment le faire, si c'est le cas.)Pouvez-vous s'il vous plaît poster le
GroupEvolutionES
code (en particulier où vous êtes en train de créerSparkContext(s)
).main
fonctions de GroupEvolutionES (que je n'ai pas).Remplacement :
Ne la magie.
J'ai eu le même problème, Voici mon code avant modification :
Et après le remplacement de :
Avec :
Il a bien fonctionné !
essayer cette
faire trait
étend
Il nous manque l' setMaster("local[*]") à définir. Une fois que nous avons ajouté puis le problème à résoudre.
Problème:
solution:
Si vous utilisez le code suivant
Puis de les remplacer avec des lignes suivantes
Spark 2.0, vous pouvez utiliser le code suivant
Vous devez ajouter .maître("local[*]") si runing locale ici * signifie que tous les nœuds , vous pouvez dire insted de 8 1,2 etc
Vous devez définir le Maître de l'URL si sur le cluster
Si vous ne fournissez pas l'Étincelle de configuration dans JavaSparkContext ensuite, vous obtenez cette erreur.
C'est:
JavaSparkContext sc = new JavaSparkContext();
Solution: Fournir JavaSparkContext sc = new JavaSparkContext(conf);