Ich habe eine Spark-App, die im lokalen Modus problemlos ausgeführt wird, aber beim Senden an den Spark-Cluster einige Probleme hat.
Die Fehlermeldung lautet wie folgt:
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)
Im obigen Code GroupEvolutionES
ist die Hauptklasse. Die Fehlermeldung lautet "Eine Master-URL muss in Ihrer Konfiguration festgelegt sein", aber ich habe den Parameter "--master" für angegeben spark-submit
.
Wer weiß, wie man dieses Problem behebt?
Spark-Version: 1.6.1
scala
apache-spark
Shuai Zhang
quelle
quelle
Spark
den Unit-Tests meines Projekts gestoßen (DataFrameSuiteBase
). Aus @Dazzlers Antwort ging hervor, dass ich dieDataFrame
Kreation intest(..) { .. }
Suiten bewegen muss . Aber auch nur zu erklären, dassDataFrame
s daslazy
Problem ist (LiebeScala
!). Dies hat darauf hingewiesen, gewesen @gyuseong in seiner Antwort untenAntworten:
Wo ist das sparkContext-Objekt definiert, befindet es sich innerhalb der Hauptfunktion?
Auch ich hatte das gleiche Problem. Der Fehler, den ich gemacht habe, war, dass ich den sparkContext außerhalb der Hauptfunktion und innerhalb der Klasse initiiert habe.
Als ich es innerhalb der Hauptfunktion initiierte, funktionierte es einwandfrei.
quelle
main()
Methode definieren sollten, anstatt sie zu erweiternscala.App
. Unterklassen vonscala.App
funktionieren möglicherweise nicht richtig." Spark 2.1.0 ManualgetOrCreate()
einen Kontext auf Treiberebene zu erstellen und bei Bedarf an die Executorebene weiterzuleiten.Die TLDR:
eine Liste der Optionen für spark.master in spark 2.2.1
Ich bin auf dieser Seite gelandet, nachdem ich versucht hatte, ein einfaches Spark SQL-Java-Programm im lokalen Modus auszuführen. Zu diesem Zweck stellte ich fest, dass ich spark.master mit folgenden Einstellungen festlegen konnte:
Ein Update zu meiner Antwort:
Dies ist in einer Produktionsumgebung nicht das, was Sie tun sollten. In einer Produktionsumgebung sollte spark.master an einer von mehreren anderen Stellen angegeben werden: entweder in $ SPARK_HOME / conf / spark-defaults.conf (hier wird es von Cloudera Manager abgelegt) oder in der Befehlszeile, wenn Sie es senden die App. (ex Spark-Submit - Master-Garn).
Wenn Sie spark.master auf diese Weise als 'lokal' angeben, versucht spark, in einem einzelnen JVM ausgeführt zu werden, wie in den Kommentaren unten angegeben. Wenn Sie dann versuchen, --deploy-mode cluster anzugeben, wird die Fehlermeldung angezeigt, dass der Cluster-Bereitstellungsmodus nicht mit dem Master "local" kompatibel ist. Dies liegt daran, dass das Setzen von spark.master = local bedeutet, dass Sie NICHT im Cluster-Modus ausgeführt werden.
Stattdessen sollten Sie für eine Produktions-App innerhalb Ihrer Hauptfunktion (oder in Funktionen, die von Ihrer Hauptfunktion aufgerufen werden) einfach Folgendes verwenden:
Hierbei werden die in der Befehlszeile / in den Konfigurationsdateien angegebenen Konfigurationen verwendet.
Um dies auch klar zu machen: --master und "spark.master" sind genau dieselben Parameter, die nur auf unterschiedliche Weise angegeben wurden. Das Setzen von spark.master im Code, wie in meiner obigen Antwort, überschreibt Versuche, --master festzulegen, und überschreibt Werte in der spark-defaults.conf. Tun Sie dies also nicht in der Produktion. Es ist großartig für Tests.
Siehe auch diese Antwort . die Links zu einer Liste der Optionen für spark.master und was jeder tatsächlich tut.
eine Liste der Optionen für spark.master in spark 2.2.1
quelle
Arbeitete für mich nach dem Ersetzen
mit
Diese Lösung wurde in einem anderen Thread im Stackoverflow gefunden.
quelle
setMaster("local[2]")
(wäre schön, eine Erklärung zu haben), aber diese Antwort kann als Lösung für das Problem angesehen werden.Der Standardwert von "spark.master" ist spark: // HOST: PORT. Der folgende Code versucht, eine Sitzung von dem eigenständigen Cluster abzurufen , der bei HOST: PORT ausgeführt wird , und erwartet, dass sich der Wert für HOST: PORT im befindet Spark-Konfigurationsdatei.
" org.apache.spark.SparkException: In Ihrer Konfiguration muss eine Master-URL festgelegt sein " besagt, dass HOST: PORT nicht in der Spark-Konfigurationsdatei festgelegt ist.
Um den Wert von "HOST: PORT" nicht zu beeinträchtigen , setzen Sie spark.master als lokal
Hier ist der Link für die Liste der Formate, in denen die Master-URL an spark.master übergeben werden kann
Referenz: Spark Tutorial - Spark Ecosystem einrichten
quelle
Wenn Sie eine eigenständige Anwendung ausführen, müssen Sie
SparkContext
stattdessen verwendenSparkSession
quelle
.setMaster("local")
ist der Schlüssel, um das Problem für mich zu lösenlocal
oder setzenlocal[*]
. Wenn ich es für AWS EMR bereitstelle, wird Garn zur Koordination verwendet, und dann setze ich den Master aufyarn
Fügen
.setMaster("local")
Sie einfach Ihren Code wie unten gezeigt hinzu:Es hat bei mir funktioniert! Viel Spaß beim Codieren!
quelle
Wie wählt der Funkenkontext in Ihrer Anwendung den Wert für den Funkenmaster aus?
SparkConf
beim Erstellen von SC bereitstellen .System.getProperties
(wo SparkSubmit es früher nach dem Lesen Ihres--master
Arguments gesetzt hat).Läuft jetzt
SparkSubmit
auf dem Treiber - in Ihrem Fall auf dem Computer, auf dem Sie dasspark-submit
Skript ausführen . Und das funktioniert wahrscheinlich auch für Sie wie erwartet.Aus den von Ihnen veröffentlichten Informationen geht jedoch hervor, dass Sie in dem Code, der an den Executor gesendet wird, einen Spark-Kontext erstellen. Da dort keine
spark.master
Systemeigenschaft verfügbar ist, schlägt dies fehl. (Und das sollten Sie eigentlich nicht tun, wenn dies der Fall ist.)Können Sie bitte den
GroupEvolutionES
Code posten (speziell dort, wo Sie ihn erstellenSparkContext(s)
) ?quelle
main
Funktionen von GroupEvolutionES erstellen sollen (was ich nicht getan habe).Ersetzen:
Hat die Magie.
quelle
Ich hatte das gleiche Problem. Hier ist mein Code vor der Änderung:
Und nach dem Ersetzen:
Mit:
Es hat gut funktioniert!
quelle
quelle
Versuche dies
Merkmal machen
erweitert es
quelle
Es fehlt der zu setzende setMaster ("local [*]") . Sobald wir hinzugefügt haben, wird das Problem behoben.
Problem:
Lösung:
quelle
Wenn Sie folgenden Code verwenden
Dann durch folgende Zeilen ersetzen
In Spark 2.0 können Sie folgenden Code verwenden
Sie müssen .master ("local [*]") hinzufügen, wenn das Ausführen von local hier * alle Knoten bedeutet. Sie können insted of 8 1,2 usw.
Sie müssen die Master-URL festlegen, wenn Sie sich im Cluster befinden
quelle
Wenn Sie in JavaSparkContext keine Spark-Konfiguration bereitstellen, wird dieser Fehler angezeigt. Das heißt: JavaSparkContext sc = neuer JavaSparkContext ();
Lösung: Stellen Sie JavaSparkContext bereit sc = new JavaSparkContext (conf);
quelle