2016-02-26 2 views
10

ich ein einfaches Programm in Funken haben:Funken: Überprüfen Sie die Cluster-UI, um sicherzustellen, dass die Arbeitnehmer registriert sind

/* SimpleApp.scala */ 
import org.apache.spark.SparkContext 
import org.apache.spark.SparkContext._ 
import org.apache.spark.SparkConf 

object SimpleApp { 
    def main(args: Array[String]) { 
    val conf = new SparkConf().setMaster("spark://10.250.7.117:7077").setAppName("Simple Application").set("spark.cores.max","2") 
    val sc = new SparkContext(conf)  
    val ratingsFile = sc.textFile("hdfs://hostname:8020/user/hdfs/mydata/movieLens/ds_small/ratings.csv") 

    //first get the first 10 records 
    println("Getting the first 10 records: ") 
    ratingsFile.take(10)  

    //get the number of records in the movie ratings file 
    println("The number of records in the movie list are : ") 
    ratingsFile.count() 
    } 
} 

Wenn ich versuche, dieses Programm von der Funkenschale dh ich in den Knotennamen einloggen zu laufen (Cloudera-Installation) und die Befehle der Reihe nach auf den Funken Shell ausgeführt:

val ratingsFile = sc.textFile("hdfs://hostname:8020/user/hdfs/mydata/movieLens/ds_small/ratings.csv") 
println("Getting the first 10 records: ") 
ratingsFile.take(10)  
println("The number of records in the movie list are : ") 
ratingsFile.count() 

ich korrekte Ergebnisse zu bekommen, aber wenn ich versuche, das Programm aus Excel, keine Ressourcen auszuführen zugewiesen zu programmieren und in dem Konsolenprotokoll alles, was ich siehe ist:

WARN TaskSchedulerImpl: Der erste Job hat keine Ressourcen akzeptiert; Überprüfen Sie die Cluster-UI, um sicherzustellen, dass die Arbeitnehmer registriert sind und über ausreichende Ressourcen

Auch in der Spark-UI, ich sehe dies:

Job keeps Running - Spark

Auch sollte es, dass diese Version von Funken zu beachten, wurde mit Cloudera installiert (daher werden keine Arbeiterknoten angezeigt).

Was soll ich tun, damit dies funktioniert?

EDIT:

überprüfte ich die HistoryServer und diese Arbeitsplätze nicht zeigen, da oben (auch in unvollständigen Anwendungen)

+0

Verwandte Frage im ersten Teil der Fehlermeldung: ['TaskSchedulerImpl: Der erste Job hat keine Ressourcen akzeptiert;'] (http://Stackoverflow.com/q/29469462/1804173) – bluenote10

Antwort

12

Ich habe die Konfiguration und Leistungsoptimierung für viele Spark-Cluster durchgeführt und dies ist eine sehr häufige/normale Nachricht, die Sie sehen können, wenn Sie einen Cluster zum ersten Mal für die Verarbeitung Ihrer Workloads vorbereiten/konfigurieren.

Dies ist eindeutig auf unzureichende Ressourcen zurückzuführen, um den Job zu starten. Der Auftrag wird anfordernden von:

  • mehr Speicher pro Arbeiter als
  • mehr CPUs, um es (1 GB) zugeteilt werden, als auf dem Cluster
+0

Ich denke, das Problem liegt in der Art, wie dieser Job bereitgestellt wird. Die Master-URL sollte nur angegeben werden, wenn Spark einen eigenen Master und eigene Slaves hat. In meinem Fall läuft das Programm jedoch auf einem YARN-Cluster. Nicht sicher, wie die Bereitstellung in diesem Fall funktioniert. –

+0

Für Garn ist der Master einfach "--master Garn" http://spark.apache.org/docs/latest/running-on-yarn.html – javadba

+0

https://spark.apache.org/docs/latest/configuration . Die Ursache ist die Standardoption im Standalone-Modus ist schlecht, werden Sie Ihre gesamte Cluster sperren, wenn Sie die Anzahl der --total-Executor-Kerne 1 in GARN-Modus werden alle verfügbaren Kerne nicht ausschlagen auf dem Arbeiter in Standalone-und Mesos grobkörnigen Modi. – mathtick

0

Sie haben noch keine Arbeiter den Job auszuführen. Es gibt keine verfügbaren Cores für die Ausführung des Jobs. Aus diesem Grund befindet sich der Status des Jobs immer noch in "Warten".

Wenn Sie keine Mitarbeiter bei Cloudera registriert haben, wie werden die Jobs ausgeführt?

+0

Nach dem, was ich weiß, Wenn Spark über YARN läuft, werden Worker-Knoten nicht in der Benutzeroberfläche angezeigt, da die Worker wieder von YARN verwaltet werden. –

+0

Ich habe diese Fehler normalerweise gesehen, wenn keine Mitarbeiter verfügbar sind oder nicht genügend freie Cores für den Job verfügbar sind. – Saket

+0

Sie haben Recht. Aber da ich dieses Programm auf YARN ausführe, könnte dieses "Master-URL" -Format falsch sein. Irgendwelche Einblicke darauf? –

1

schließlich herausgefunden, was die Antwort ist.

Bei der Bereitstellung eines Spark-Programms auf einem YARN-Cluster ist die Master-URL nur Garn.

So im Programm, der Kontext Funken sieht genauso aus wie:

val conf = new SparkConf().setAppName("SimpleApp") 

Dann sollte dieses Eclipse-Projekt mit Maven und das erzeugte Glas gebaut werden solle es durch Kopieren auf dem Cluster eingesetzt werden, um den Cluster und dann den folgenden Befehl ausgeführt

spark-submit --master yarn --class "SimpleApp" Recommender_2-0.0.1-SNAPSHOT.jar 

Dies bedeutet, dass von Eclipse direkt ausgeführt würde nicht funktionieren.

+0

Ich bekomme ähnliche Fehler in HDP 2.4. Wenn ich hdp als Master im Standalone-Modus einstelle, könnte ich Spark-Shell vom Slave-Server zum Master-Server laufen lassen. Dann könnte ich eine Methode wie "val distData = sc.parallelize (Array (1, 2, 3, 4, 5))" ausführen. Aber wenn Sie versuchen, Dateien von hdfs zu lesen, wird es den Fehler auslösen. Es scheint, dass es in Eclipse funktionieren könnte. Hoffe jemand könnte helfen ~ – Decula

2

Sie können die Arbeitsknotenkerne Ihres Clusters überprüfen: Ihre Anwendung kann dies nicht überschreiten. Zum Beispiel haben Sie zwei Arbeitsknoten. Und pro Arbeitsknoten haben Sie 4 Kerne. Dann müssen Sie 2 Anwendungen ausführen. So können Sie jeder Anwendung 4 Kerne geben, um den Job auszuführen.

Sie können im Code wie folgt festgelegt:

SparkConf sparkConf = new SparkConf().setAppName("JianSheJieDuan") 
          .set("spark.cores.max", "4"); 

Es funktioniert für mich.

Verwandte Themen