J'ai une application Spark qui fonctionne sans problème en mode local, mais j'ai quelques problèmes lors de la soumission au cluster Spark.
Les messages d'erreur sont les suivants:
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 indique "Une URL principale doit être définie dans votre configuration", mais j'ai fourni le paramètre "--master" à spark-submit
.
Quelqu'un qui sait comment résoudre ce problème?
Version Spark: 1.6.1
scala
apache-spark
Shuai Zhang
la source
la source
Spark
les tests unitaires de mon projet (DataFrameSuiteBase
). D' après la réponse de @Dazzler , j'ai compris que je devais déplacer laDataFrame
création à l'intérieur destest(..) { .. }
suites. Mais aussi simplement déclarerDataFrame
s êtrelazy
corrige (amourScala
!). Cela a été souligné par @gyuseong dans sa réponse ciRéponses:
Où est défini l'objet sparkContext, est-il à l'intérieur de la fonction principale?
Moi aussi, j'ai rencontré le même problème, l'erreur que j'ai faite a été d'avoir lancé le sparkContext en dehors de la fonction principale et à l'intérieur de la classe.
Quand je l'ai lancé dans la fonction principale, cela a bien fonctionné.
la source
main()
méthode au lieu d'étendrescala.App
. Les sous-classes descala.App
peuvent ne pas fonctionner correctement." Manuel Spark 2.1.0getOrCreate()
un contexte doit être créé au niveau du pilote et transmis au niveau de l'exécuteur si nécessaire.Le TLDR:
une liste des options pour spark.master dans spark 2.2.1
Je me suis retrouvé sur cette page après avoir essayé d'exécuter un simple programme java Spark SQL en mode local. Pour ce faire, j'ai trouvé que je pouvais définir spark.master en utilisant:
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, spark.master doit être spécifié à l'un des deux autres endroits: soit dans $ SPARK_HOME / conf / spark-defaults.conf (c'est là que cloudera manager le placera), soit sur la ligne de commande lorsque vous soumettez l'application. (ex spark-submit - master yarn).
Si vous spécifiez spark.master comme étant «local» de cette manière, spark essaiera de s'exécuter dans un seul jvm, comme indiqué par les commentaires ci-dessous. Si vous essayez ensuite de spécifier le cluster --deploy-mode, vous obtiendrez une erreur «Le mode de déploiement du cluster n'est pas compatible avec le maître« local »». Cela est dû au fait que la définition de spark.master = local signifie que vous n'utilisez PAS en mode cluster.
Au lieu de cela, pour une application de production, dans votre fonction principale (ou dans les fonctions appelées par votre fonction principale), vous devez simplement utiliser:
Cela utilisera les configurations spécifiées sur la ligne de commande / dans les fichiers de configuration.
Aussi, pour être clair sur ceci aussi: --master et "spark.master" sont exactement le même paramètre, juste spécifié de différentes manières. La définition de spark.master dans le code, comme dans ma réponse ci-dessus, remplacera les tentatives de définition de --master et remplacera les valeurs dans spark-defaults.conf, alors ne le faites pas en production. C'est parfait pour les tests.
aussi, voyez cette réponse . qui renvoie à une liste d'options pour spark.master et ce que chacune fait réellement.
une liste des options pour spark.master dans spark 2.2.1
la source
A travaillé pour moi après le remplacement
avec
J'ai trouvé cette solution sur un autre thread sur stackoverflow.
la source
setMaster("local[2]")
(ce serait bien d'avoir une explication), mais cette réponse peut être considérée comme la solution au problème.La valeur par défaut de "spark.master" est spark: // HOST: PORT, et le code suivant essaie d'obtenir une session du cluster autonome qui s'exécute sur HOST: PORT et s'attend à ce que la valeur HOST: PORT soit dans le fichier de configuration spark.
" org.apache.spark.SparkException: une URL principale doit être définie dans votre configuration " indique que HOST: PORT n'est pas défini dans le fichier de configuration Spark.
Pour ne pas vous soucier de la valeur de "HOST: PORT", définissez spark.master comme local
Voici le lien pour la liste des formats dans lesquels l'URL principale peut être transmise à spark.master
Référence: Tutoriel Spark - Configurer l'écosystème Spark
la source
Si vous exécutez une application autonome, vous devez utiliser à la
SparkContext
place deSparkSession
la source
.setMaster("local")
est la clé pour résoudre le problème pour moilocal
oulocal[*]
. Lorsque je le déploie sur AWS EMR, il utilise Yarn pour la coordination, puis je définis master commeyarn
ajoutez simplement
.setMaster("local")
à votre code comme indiqué ci-dessous:Cela a fonctionné pour moi! Bon codage!
la source
Comment le contexte Spark dans votre application choisit-il la valeur de Spark Master?
SparkConf
lors de la création de SC.System.getProperties
(où SparkSubmit l'a mis plus tôt après avoir lu votre--master
argument).Maintenant,
SparkSubmit
s'exécute sur le pilote - qui dans votre cas est la machine à partir de laquelle vous exécutez lespark-submit
script. Et cela fonctionne probablement comme prévu pour vous aussi.Cependant, d'après les informations que vous avez publiées, il semble que vous créez un contexte d'étincelle dans le code qui est envoyé à l'exécuteur - et étant donné qu'aucune
spark.master
propriété système n'y est disponible, cela échoue. (Et vous ne devriez pas vraiment le faire, si tel est le cas.)Pouvez-vous s'il vous plaît poster le
GroupEvolutionES
code (spécifiquement là où vous créezSparkContext(s)
).la source
main
fonctions de GroupEvolutionES (ce que je n'ai pas fait).Remplacement:
A fait la magie.
la source
J'ai eu le même problème, voici mon code avant modification:
Et après le remplacement:
Avec :
Cela a bien fonctionné!
la source
la source
essaye ça
faire un trait
l'étend
la source
Il nous manque le setMaster ("local [*]") à définir. Une fois que nous avons ajouté, le problème est résolu.
Problème:
Solution:
la source
Si vous utilisez le code suivant
Puis remplacez par les lignes suivantes
Dans Spark 2.0, vous pouvez utiliser le code suivant
Vous devez ajouter .master ("local [*]") si exécuter local ici * signifie tous les nœuds, vous pouvez dire insted de 8 1,2 etc
Vous devez définir l'URL principale si vous êtes sur le cluster
la source
Si vous ne fournissez pas de configuration Spark dans JavaSparkContext, vous obtenez cette erreur. C'est-à-dire: JavaSparkContext sc = new JavaSparkContext ();
Solution: fournissez JavaSparkContext sc = new JavaSparkContext (conf);
la source