Als David Griffin erwähnt, spark-shell
verwendet, kann sehr hilfreich sein, . Ich finde jedoch, dass das eigentliche lokale Debugging, das Setzen von Breakpoints, das Untersuchen von Variablen usw. unerlässlich ist. Hier ist, wie ich es mit IntelliJ mache.
Stellen Sie zuerst sicher, dass Sie Ihre Funkenanwendung lokal unter Verwendung von spark-submit
, z. so etwas wie:
spark-submit --name MyApp --class MyMainClass --master local[2] myapplication.jar
Dann informieren Sie Ihren lokalen Funken Fahrer anzuhalten und für eine Verbindung von einem Debugger warten, wenn er startet, durch Hinzufügen einer Option wie folgt aus:
--conf spark.driver.extraJavaOptions=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005
wo agentlib:jdwp
ist die Java Debug Wire Protocol Option durch eine durch Kommata getrennte Liste von Unteroptionen gefolgt:
transport
definiert das Verbindungsprotokoll zwischen Debugger und Debuggee verwendet - eithe r Socket oder "shared memory" - Sie wollen fast immer socket (dt_socket
) außer ich glaube in einigen Fällen auf Microsoft Windows
- ob dieser Prozess sollte der Server sein, wenn mit dem Debugger (oder umgekehrt, der Client) - - Sie benötigen immer einen Server und einen Client. In diesem Fall sind wir der Server und warten auf eine Verbindung vom Debugger
suspend
, ob die Ausführung angehalten werden soll, bis ein Debugger erfolgreich verbunden ist. Wir schalten das ein, damit der Treiber nicht startet, bis der Debugger
address
hier verbindet, das ist der Port, auf dem (für eingehende Debugger-Verbindungsanforderungen) überwacht wird.Sie können es auf jedem verfügbaren Port eingestellt (Sie müssen nur sicherstellen, dass der Debugger auf demselben Port verbinden konfiguriert ist)
So, jetzt Ihr spark-submit
Kommandozeile etwas aussehen sollte:
spark-submit --name MyApp --class MyMainClass --master local[2] --conf spark.driver.extraJavaOptions=agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005
Nun, wenn Sie die oben ausführen, sollten Sie so etwas wie
Listening for transport dt_socket at address: 5005
und Ihre Funken Anwendung wartet der Debugger anhängen sehen.
Als nächstes öffnen Sie das IntelliJ-Projekt mit Ihrer Spark-Anwendung, und öffnen Sie dann "Ausführen -> Konfigurationen bearbeiten ..." Klicken Sie dann auf das "+", um eine neue Run/Debug-Konfiguration hinzuzufügen, und wählen Sie "Remote". Gib ihm einen Namen, z.B. "SparkLocal", wählen Sie "Socket" für den Transport, "Attach" für den Debugger-Modus und geben Sie "localhost" für Host und den oben für Port verwendeten Port ein, in diesem Fall "5005". Klicken Sie auf "OK", um zu speichern.
In meiner Version von IntelliJ gibt es Vorschläge für die Debug-Befehlszeile für den debugged Prozess, und es verwendet "suspend = n" - wir ignorieren das und verwenden "suspend = y" (wie oben) weil wir wollen, dass die Anwendung wartet, bis wir uns verbinden, um zu beginnen.
Jetzt sollten Sie bereit sein zu debuggen. Starten Sie einfach spark mit dem obigen Befehl, wählen Sie dann die IntelliJ-Run-Konfiguration, die Sie gerade erstellt haben und klicken Sie auf Debug. IntelliJ sollte eine Verbindung zu Ihrer Spark-Anwendung herstellen, die nun gestartet werden sollte. Sie können Breakpoints setzen, Variablen überprüfen usw.
ich zu erreichen Wissen Sie nicht wirklich, was Sie unter "Debuggen lernen" verstehen. In dieser Anleitung erfahren Sie, wie Sie Spark in IntelliJide https://docs.sigmoidanalytics.com/index.php/Step_by_Step_instructions_on_how_to_build_Spark_App_with_IntelliJ_IDEA lokal einrichten. – abalcerek
Ich meine "wie kann ich durch die SimpleApp-Anwendung auf der Spark-Website gehen. Es gibt die SimpleApp.java-Datei und die pom.xml (wie auf der Spark-Website codiert). Wie kann ich Intellij IDE verwenden, um Zeile für Zeile Durch den Code in SimpleApp.java und sehen, was jede Zeile tatsächlich tut? Ich möchte in der Lage sein, dies zu tun, ohne den Auftrag an einen Cluster zu senden. Ich möchte nur den Code auf meinem Laptop lokal. Der von Ihnen angegebene Link gibt Die Schritte zum Erstellen der Spark App mit IntelliJ IDEA Wie wäre es, den Code Zeile für Zeile durchzugehen? Jede Hilfe wird sehr geschätzt. Danke. – eugenerory
Ich weiß nicht über Scala, aber zumindest in Java können Sie Standard IDEA Debugger (im lokalen Modus Eine Sache, die Sie sich erinnern müssen, wenn Sie große Sammlung haben, müssen Sie durch alle Elemente gehen. – abalcerek