2016-05-16 5 views
0

Ich habe einen eigenständigen Spark-Cluster, der auf einigen Computern ausgeführt wird. Alle Arbeiter verwenden 2 Kerne und 4 GB Speicher. Ich kann einen Jobserver mit ./server_start.sh --master spark://ip:7077 --deploy-mode cluster --conf spark.driver.cores=2 --conf spark.driver.memory=4g starten, aber wenn ich versuche, einen Server mit mehr als 2 Kernen zu starten, bleibt der Zustand des Treibers bei "SUBMITTED" hängen und kein Arbeiter nimmt den Job an.Ausführen eines verteilten Spark Job Servers mit mehreren Arbeitern in einem eigenständigen Spark-Cluster

Ich habe versucht, die Spark-Shell auf 4 Kerne mit ./spark-shell --master spark://ip:7077 --conf spark.driver.cores=4 --conf spark.driver.memory=4g zu starten, und der Auftrag wird zwischen 2 Arbeiter geteilt (je 2 Kerne). Die Spark-Shell wird jedoch als Anwendung und nicht als Treiber gestartet.

Gibt es eine Möglichkeit, eine Treiberaufteilung zwischen mehreren Mitarbeitern auszuführen? Oder kann ich den Job-Server als Anwendung und nicht als Treiber ausführen?

+0

Im ersten Beispiel stellen Sie JobServer im Cluster-Modus bereit, dh es werden 2 CPU-Kerne eines Worker verwendet. Wenn der Kontext, den Sie in JobServer erstellen, mehr nach den verbleibenden verfügbaren Kernen fragt, würde dies Ihr Problem erklären. Dies passiert nicht mit Spark-Shell, weil es immer im Client-Modus läuft, dann wird es 4 Kerne auf dem lokalen Rechner verwenden. –

+0

Dies ist bevor ich einen Kontext erstellen. Ich erstelle keinen Kontext auf dem Jobserver, den ich bereitstelle, sondern durch Aufruf von http: // ip: 8090/contexts, wenn der Server läuft. – yberg

+0

Ok, ich habe das Problem verstanden. Jeder Arbeiter hat nur 2 Kerne, oder? Wenn Sie den Cluster "--deploy-mode" verwenden, wird JobServer in einem Worker ausgeführt und kann nicht geteilt werden. Daher muss die Anzahl der ihm zugewiesenen Kerne geringer sein als die Anzahl der Kerne, die für einen einzelnen Arbeiter verfügbar sind. Alternativ können Sie JobServer im Client-Modus ausführen ('--deploy-mode client'), so dass es die Kerne verwendet, die auf dem Rechner verfügbar sind, auf dem Sie den Dienst starten. –

Antwort

2

Das Problem im Chat aufgelöst wurde

Sie haben Ihre Jobserver .conf Datei zu ändern, um die Master-Parameter zu setzen, um den Cluster zu Punkt:

master = "spark://ip:7077" 

Auch der Speicher, die Jobserver-Programm Verwendungen können in der settings.sh Datei festgelegt werden.

Nach Einstellung dieser Parameter können Sie Jobserver mit einem einfachen Anruf starten:

./server_start.sh 

Dann, wenn der Dienst ausgeführt wird, können Sie Ihren Kontext über REST erstellen können, die die Cluster-Ressourcen stellen und wird eine entsprechende Anzahl von excecutors/Kerne erhalten:

curl -d "" '[hostname]:8090/contexts/cassandra-context?context-factory=spark.jobserver.context.CassandraContextFactory&num-cpu-cores=8&memory-per-node=2g' 

Schließlich jeder Job per Post an Jobserver auf diesem erstellt Zusammenhang die Testamentsvollstrecker dem Kontext zugeordnet nutzen können gesendet und wird in einer verteilten Art und Weise ausgeführt werden können, .