Verwenden Sie spark-submit, um eine Anwendung an den EC2-Cluster zu senden

8

Ich bin neu bei Spark und versuche, es auf EC2 auszuführen. Ich folge dem Tutorial auf Spark Webseite, indem ich Spark-ec2 benutze, um einen Spark Cluster zu starten. Dann versuche ich spark-submit zu verwenden, um die Anwendung an den Cluster zu senden. Der Befehl sieht so aus:

./bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://ec2-54-88-9-74.compute-1.amazonaws.com:7077 --executor-memory 2G --total-executor-cores 1 ./examples/target/scala-2.10/spark-examples_2.10-1.0.0.jar 100

Ich habe jedoch folgenden Fehler:

ERROR SparkDeploySchedulerBackend: Application has been killed. Reason: All masters are unresponsive! Giving up.

Bitte lassen Sie mich wissen, wie Sie es beheben können. Danke.

    
user2547081 13.06.2014, 07:05
quelle

3 Antworten

7

Dieses Problem tritt auf, weil der Master-Knoten Ihres Spark-Standalone-Clusters keine TCP-Verbindung zum Laufwerk (auf Ihrem Computer) herstellen kann. Der Standardmodus von spark-submit ist client , der den Treiber auf dem Rechner ausführt, auf dem er ausgeführt wurde.

Bei spark-deploy wurde ein neuer Cluster-Modus hinzugefügt, der den Job an den Master übergibt, wo er dann auf einem Client ausgeführt wird, sodass keine direkte Verbindung mehr erforderlich ist. Leider wird dieser Modus im Standalone-Modus nicht unterstützt.

Sie können für das JIRA-Problem hier abstimmen: Ссылка

Das Tunneln Ihrer Verbindung über SSH ist möglich, aber die Latenz wäre ein großes Problem, da der Treiber lokal auf Ihrem Computer ausgeführt wird.

    
jhappoldt 14.07.2014 19:37
quelle
2

Ich bin neugierig, ob Sie immer noch dieses Problem haben ... Aber falls jemand hier fragt, ist eine kurze Antwort. Wie von jhappoldt erläutert, kann der Master-Knoten Ihres Spark-Standalone-Clusters keine TCP-Verbindung zum Laufwerk (auf Ihrem lokalen Rechner) herstellen. Zwei Problemumgehungen sind möglich, getestet und erfolgreich.

(1) Erstellen Sie in EC2 Management Console eine neue Sicherheitsgruppe und fügen Sie Regeln hinzu, um TCP von Ihrem PC aus (öffentliche IP-Adresse) zu aktivieren. (Ich habe TCP-Regeln ein- und ausgehend hinzugefügt) ... Fügen Sie diese Sicherheitsgruppe dann Ihrer Master-Instanz hinzu. (Rechtsklick - & gt; Netzwerk - & gt; Sicherheitsgruppen ändern). Hinweis: Fügen Sie sie hinzu und entfernen Sie nicht die bereits eingerichteten Sicherheitsgruppen.

Diese Lösung funktioniert gut, aber in Ihrem speziellen Szenario, bei dem Ihre Anwendung von der lokalen Maschine auf den EC2-Cluster verteilt wird, werden Sie weitere (ressourcenbezogene) Probleme haben, so dass die nächste Option die beste ist

(2) Lassen Sie Ihre .jar-Datei (oder .egg) mit scp auf den Master-Knoten kopieren. Sie können diesen Link Ссылка nachsehen, um Informationen dazu zu erhalten. und stellen Sie Ihre Anwendung vom Master-Knoten bereit. Hinweis: Der Funke ist bereits vorinstalliert, so dass Sie nichts anderes tun, als denselben genauen Befehl zu schreiben, den Sie auf Ihrem lokalen Rechner von ~ / spark / bin schreiben. Dies soll perfekt funktionieren.

    
ElSioufy 17.02.2015 11:55
quelle
1

Führen Sie den Befehl auf Ihrem lokalen Rechner oder auf dem erstellten EC2-Knoten aus? Wenn Sie dies lokal tun, vergewissern Sie sich, dass Port 7077 in den Sicherheitseinstellungen offen ist, da er standardmäßig nach außen geschlossen ist.

    
Dan Osipov 19.06.2014 17:17
quelle

Tags und Links