webentwicklung-frage-antwort-db.com.de

Spark: Überprüfen Sie Ihre Cluster-Benutzeroberfläche, um sicherzustellen, dass die Arbeiter registriert sind

Ich habe ein einfaches Programm in Spark:

/* 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 spark-Shell aus auszuführen, d. H. Ich melde mich beim Namensknoten an (Cloudera-Installation) und führe die Befehle nacheinander auf der spark-Shell aus:

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 bekomme korrekte Ergebnisse, aber wenn ich versuche, das Programm von Eclipse aus auszuführen, werden dem Programm keine Ressourcen zugewiesen. Im Konsolenprotokoll sehe ich nur Folgendes:

WARN TaskSchedulerImpl: Der ursprüngliche Job hat keine Ressourcen akzeptiert. Überprüfen Sie Ihre Cluster-Benutzeroberfläche, um sicherzustellen, dass die Mitarbeiter registriert sind und über ausreichende Ressourcen verfügen.

In der Spark-Benutzeroberfläche sehe ich Folgendes:

Job läuft weiter - Spark

Es sollte auch beachtet werden, dass diese Version von spark mit Cloudera installiert wurde (daher werden keine Arbeiterknoten angezeigt).

Was soll ich tun, damit das funktioniert?

EDIT:

Ich habe den HistoryServer überprüft und diese Jobs werden dort nicht angezeigt (selbst bei unvollständigen Anwendungen)

12
vineet sinha

Ich habe die Konfiguration und die Leistung für viele Funkencluster angepasst. Dies ist eine sehr häufige/normale Nachricht, die angezeigt wird, wenn Sie zum ersten Mal einen Cluster für die Verarbeitung Ihrer Workloads vorbereiten/konfigurieren.

Dies ist eindeutig darauf zurückzuführen, dass nicht genügend Ressourcen vorhanden sind, um den Job zu starten. Der Job fordert eines der folgenden an:

  • mehr Arbeitsspeicher pro Worker als ihm zugewiesen (1 GB)
  • mehr CPU's als im Cluster verfügbar
13
javadba

Sie können die Arbeitsknoten-Kerne Ihres Clusters überprüfen: Ihre Anwendung kann dies nicht überschreiten. Beispielsweise 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. 

Im Code kannst du so einstellen: 

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

Für mich geht das.

2
iwwenbo

Schließlich herausgefunden, was die Antwort ist. 

Bei der Bereitstellung eines Funkenprogramms in einem YARN-Cluster ist die Master-URL nur ein Garn. 

Im Programm sollte der Funken-Kontext also so aussehen:

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

Dann sollte dieses Eclipse-Projekt mit Maven erstellt werden. Das generierte JAR sollte im Cluster bereitgestellt werden, indem es in den Cluster kopiert und anschließend der folgende Befehl ausgeführt wird

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

Dies bedeutet, dass das direkte Ausführen von Eclipse nicht funktioniert.

2
vineet sinha

Es gibt auch einige andere Ursachen für diese Fehlermeldung als die hier veröffentlichten.

Stellen Sie für einen spark-on-mesos-Cluster sicher, dass Sie über Java8 oder eine neuere Java-Version in mesos slaves verfügen.

Stellen Sie für spark standalone sicher, dass Sie Java8 (oder neuer) für die workers verwenden.

0
AyoubOm