2016-12-10 1 views
4

Ich baue gerade einen benutzerdefinierten Andock-Container aus einer einfachen Distribution mit Apache Zeppelin + Spark 2.x im Inneren.Wie entlarven Sie Spark Driver hinter dockerisiertem Apache Zeppelin?

Meine Spark-Jobs werden in einem Remote-Cluster ausgeführt, und ich verwende yarn-client als Master.

Wenn ich ein Notebook laufen lasse und versuche, sc.version zu drucken, bleibt das Programm stecken. Wenn ich an die Remote-Ressource-Manager gehe, hat eine Anwendung erstellt und akzeptiert, aber in den Protokollen kann ich lesen:

INFO yarn.ApplicationMaster: Waiting for Spark driver to be reachable

Mein Verständnis für die Situation ist, dass der Cluster nicht in der Lage ist, den Fahrer zu sprechen, in der Container, aber ich weiß nicht, wie ich dieses Problem lösen soll.

ich zur Zeit der folgenden Konfiguration verwenden:

  • spark.driver.port Set PORT1 und Option -p PORT1:PORT1 an den Behälter geleitet
  • spark.driver.host Satz 172.17.0.2 (ip des Behälters)
  • SPARK_LOCAL_IP Set 172.17.0.2 (ip des Containers)
  • spark.ui.port auf PORT2 und Optioneingestelltan den Behälter geleitet

Ich habe das Gefühl, dass ich die SPARK_LOCAL_IP an den Host-IP ändern sollte, aber wenn ich dies tun, ist SparkUI nicht gestartet werden, bevor der Prozess einen Schritt zu blockieren.

Vielen Dank im Voraus für irgendwelche Ideen/Ratschläge!

+1

Vielen Dank für Ihre Antwort, aber eigentlich, wenn ich 'spark.driver.host' gesetzt Um anders zu sein (die Host-IP-Adresse zum Beispiel), kann der Treiber in der ersten Stufe nicht gestartet werden ('java.net.BindException: angeforderte Adresse kann nicht zugeordnet werden: Dienst 'sparkDriver' ist fehlgeschlagen'). – ThR37

Antwort

2

Gute Frage! Vor allem, wie Sie wissen, läuft Apache Zeppelin interpreters in a separate processes.

Apache Zeppelin architecture diagram

In Ihrem Fall Spark-Interpreter JVM-Prozess beherbergt eine SparkContext und dient als SparkDriver-Instanz für den yarn-client Deployment-Modus. Dieser Prozess innerhalb des Containers muss gemäß Apache Spark documentation in der Lage sein, an \ von YARN ApplicationMaster und allen SparkWorkers-Maschinen des Clusters hin und her zu kommunizieren.

Apache Spark architecture diagram

Dies bedeutet, dass Sie number of ports geöffnet und manuell weitergeleitet zwischen dem Behälter und einer Host-Maschine haben müssen. Hier ist an example of a project at ZEPL ähnliche Arbeit, wo wir 7 Ports getan haben, um den Job zu erledigen.

Anoter aproach kann laufen Docker in einer host mode Networking (obwohl es offenbar nicht auf OS X funktioniert, aufgrund a recent bug)

Verwandte Themen