Wie kann PySpark genannt werden im debug-Modus?
Habe ich IntelliJ IDEA einrichten mit Apache Spark 1.4.
Will ich in der Lage, die debug-Punkte auf meine Spark Python-Skripte, so dass ich Debuggen kann Ihnen leicht.
Ich bin derzeit etwas Python zu initialisieren, die Funke-Prozess
proc = subprocess.Popen([SPARK_SUBMIT_PATH, scriptFile, inputFile], shell=SHELL_OUTPUT, stdout=subprocess.PIPE)
if VERBOSE:
print proc.stdout.read()
print proc.stderr.read()
Wenn spark-submit
schließlich fordert myFirstSparkScript.py
, der debug-Modus ist nicht aktiviert und es wird als normal. Leider Bearbeiten Sie die Apache-Spark-source-code und läuft eine angepasste Kopie ist keine akzeptable Lösung.
Weiß jemand, ob es möglich ist, haben Funke-submit-Aufruf des Apache-Spark-Skript im debug-Modus? Wenn ja, wie?
Debug-Meldungen oft schreibt stderr, aber Sie drucken nur stdout
Aktualisiert code, der aber klar zu sein, das Problem ist nicht die Konsole Inhalt, sondern die Tatsache, dass der debugger nicht binden, um die Pyspark Teilprozess
haben Sie versucht mit IPython Notebook auf Ihren Fahrer und Durchlaufen pyspark Skript Zeile für Zeile? Dies ist in der Regel meine erste Schritt, um sicherzustellen, dass das Skript funktioniert, weil ich finde Spark-Protokollierung zu werden, ziemlich verwirrend. Siehe diese Anleitung: blog.cloudera.com/blog/2014/08/...
Aktualisiert code, der aber klar zu sein, das Problem ist nicht die Konsole Inhalt, sondern die Tatsache, dass der debugger nicht binden, um die Pyspark Teilprozess
haben Sie versucht mit IPython Notebook auf Ihren Fahrer und Durchlaufen pyspark Skript Zeile für Zeile? Dies ist in der Regel meine erste Schritt, um sicherzustellen, dass das Skript funktioniert, weil ich finde Spark-Protokollierung zu werden, ziemlich verwirrend. Siehe diese Anleitung: blog.cloudera.com/blog/2014/08/...
InformationsquelleAutor Toby Leheup | 2015-07-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Soweit ich verstehe Ihre Absichten, was Sie wollen, ist nicht direkt möglich, da die Spark-Architektur. Auch ohne
subprocess
nennen, die nur einen Teil Ihres Programms aus zugänglich ist, direkt auf ein Treiber ist einSparkContext
. Aus dem rest sind Sie effektiv isoliert durch die verschiedenen Ebenen der Kommunikation, davon mindestens eine (im lokalen Modus) JVM-Instanz. Um zu verdeutlichen, dass können verwenden Sie ein Diagramm, aus PySpark Interna Dokumentation.Was ist im linken Feld ist der Teil, der zugänglich ist vor Ort und könnte verwendet werden, um einen debugger Anhängen. Da ist es den meisten beschränkt sich auf die JVM-Anrufe gibt es wirklich nichts, das sollte für Sie von Interesse sind, es sei denn, du bist tatsächlich ändern PySpark selbst.
Was ist auf der rechten Seite passiert, aus der Ferne, und je nachdem ein cluster-manager, die Sie verwenden ist so ziemlich eine black-box aus einer Perspektive des Benutzers. Darüber hinaus gibt es viele Situationen, wenn Sie Python-code auf der rechten Seite ist nichts weiter als der Aufruf die JVM API.
Dies ist war der schlechte Teil. Das gute daran ist, dass die meisten der Zeit, es sollte keine Notwendigkeit für remote-debugging. Ohne Zugriff auf Objekte wie
TaskContext
, die sich leicht spotten, jeder Teil der code sollte problemlos lauffähig /getestet werden, die lokal und ohne Verwendung von Spark-Instanz zu löschen.Funktionen, die Sie passieren, um Aktionen /Transformationen nehmen standard und vorhersehbar Python-Objekten und werden wieder erwartet standard-Python-Objekte. Was auch wichtig ist sollten diese Nebenwirkungen frei
Also am Ende des Tages haben Sie, um Teile Ihres Programms - eine dünne Schicht zugegriffen werden kann interaktiv getestet und basiert rein auf Eingänge /Ausgänge und "computational core", das erfordert keine Spark zum testen /Debuggen.
Andere Optionen
Dass gesagt wird, du bist nicht ganz aus Optionen hier.
Lokalen Modus
(passiv attach debugger an einen Laufenden interpreter)
Plain-GDB und PySpark debugger angefügt werden kann, um einen Laufenden Prozess. Dies kann nur getan werden, sobald PySpark daemon und /oder worker-Prozesse gestartet wurden. Im lokalen Modus können Sie erzwingen, indem Sie eine dummy-Aktion, zum Beispiel:
wo
n
ist eine Anzahl "Kerne" verfügbar in den lokalen Modus (local[n]
). Beispiel procedure step-by-step an Unix-wie Systeme:Start PySpark shell:
Verwenden
pgrep
zu überprüfen gibt es keine daemon-Prozess läuft:Die gleiche Sache, die bestimmt werden kann, in PyCharm von:
alt+shift+ und wählen Befestigen Lokalen Prozess:
oder Laufen -> Befestigen Lokalen Prozess.
In diesem Punkt sollten Sie nur PySpark shell (und möglicherweise einige unabhängige Prozesse).
Ausführen von dummy-Aktion:
sc.parallelisieren([], 1).count()
Nun sehen Sie beide
daemon
undworker
(hier nur einer):und
Den Prozess mit niedriger
pid
ist ein daemon, der eine höherepid
ist (möglicherweise) für eine Ephemere Arbeiter.In diesem Punkt kann man anfügen-debugger an einen Prozess von Interesse:
Mit einfachen GDB durch den Aufruf:
Der größte Nachteil dieses Ansatzes ist, dass Sie haben, finden Sie die richtige Dolmetscherin am richtigen moment.
Verteilten Modus
(Verwendung, dass die aktive Komponente die Verbindung zum debugger server)
Mit PyCharm
PyCharm bietet Python-Debug-Server die verwendet werden können, mit PySpark Arbeitsplätze.
Zunächst sollten Sie eine Konfiguration für den remote-debugger:
Konfigurieren Sie host und port entsprechend Ihrer Konfiguration (stellen Sie sicher, dass port und erreicht werden, von einer remote-Maschine)
Start debug server:
shift+F9
Sollten Sie sehen, debugger-Konsole:
Stellen Sie sicher, dass
pyddev
zugänglich auf der worker-Knoten, die entweder durch die Installation oder die Verteilung deregg
Datei.pydevd
verwendet eine aktive Komponente, die eingeschlossen in Ihrem code:Der schwierige Teil ist das finden der richtigen Stelle, um es aufzunehmen und wenn Sie debug-batch-Operationen (wie Funktionen übergeben
mapPartitions
) kann es erforderlich patchen PySpark Quelle selbst, zum Beispielpyspark.daemon.worker
oderRDD
Methoden wieRDD.mapPartitions
. Sagen wir, wir sind daran interessiert, debugging-Arbeiter Verhalten. Möglich patch kann wie folgt Aussehen:Wenn Sie sich entscheiden, patch-Spark-Quelle sicher, dass Sie gepatcht Quelle nicht gepackte version, die befindet sich in
$SPARK_HOME/python/lib
.Ausführen PySpark code. Gehen Sie zurück zum debugger-Konsole und Spaß haben:
Andere tools
Gibt es eine Reihe von tools, einschließlich python-Schacht oder
pyrasite
, die verwendet werden können, mit einiger Anstrengung, arbeiten mit PySpark.Hinweis:
Natürlich können Sie "Fernbedienung" (aktive) Methoden mit lokalen Modus und bis zu einem gewissen Grad "lokalen" Methoden mit verteilten Modus (Sie können die Verbindung zu den Arbeiter-Knoten, und führen Sie die gleichen Schritte wie in den lokalen Modus).
InformationsquelleAutor zero323