Debuggen von Apache Spark-Anwendungen in einem HDInsight-Cluster mit dem Azure-Toolkit für IntelliJ per SSH

Dieser Artikel enthält eine ausführliche Anleitung zur Verwendung der HDInsight-Tools im Azure-Toolkit für IntelliJ zum Remotedebuggen von Anwendungen in einem HDInsight-Cluster.

Voraussetzungen

Erstellen einer Spark Scala-Anwendung

  1. Starten Sie IntelliJ IDEA, und wählen Sie Create New Project (Neues Projekt erstellen) aus, um das Fenster New Project (Neues Projekt) zu öffnen.

  2. Wählen Sie im linken Bereich Apache Spark/HDInsight aus.

  3. Wählen Sie im Hauptfenster Spark Project with Samples (Scala) (Spark-Projekt mit Beispielen (Scala)) aus.

  4. Wählen Sie in der Dropdownliste Build tool (Buildtool) eine der folgenden Optionen aus:

    • Maven für die Unterstützung des Scala-Projekterstellungs-Assistenten
    • SBT zum Verwalten von Abhängigkeiten und Erstellen für das Scala-Projekt

    Intellij Create New Project Spark.

  5. Wählen Sie Weiter aus.

  6. Geben Sie im nächsten Fenster New Project (Neues Projekt) die folgenden Informationen an:

    Eigenschaft BESCHREIBUNG
    Projektname Geben Sie einen Namen ein. In dieser exemplarischen Vorgehensweise wird myApp verwendet.
    Projektspeicherort Geben Sie den gewünschten Speicherort für Ihr Projekt ein.
    Project SDK (Projekt-SDK) Wenn leer, wählen Sie New... (Neu...) aus, und navigieren Sie zu Ihrem JDK.
    Spark-Version Der Erstellungs-Assistent integriert die passende Version für das Spark-SDK und das Scala-SDK. Wenn Sie eine ältere Spark-Clusterversion als 2.0 verwenden, wählen Sie Spark 1.x aus. Wählen Sie andernfalls Spark 2.x aus. In diesem Beispiel wird Spark 2.3.0 (Scala 2.11.8) verwendet.

    Intellij New Project select Spark version.

  7. Wählen Sie Fertig stellenaus. Es kann einige Minuten dauern, bis das Projekt verfügbar ist. Verfolgen Sie den Fortschritt in der unteren rechten Ecke.

  8. Erweitern Sie das Projekt, und navigieren Sie zu src>main>scala>sample (Beispiel). Doppelklicken Sie auf SparkCore_WasbIOTest.

Durchführen einer lokalen Ausführung

  1. Klicken Sie im Skript SparkCore_WasblOTest mit der rechten Maustaste auf den Skript-Editor, und wählen Sie dann die Option Run 'SparkCore_WasbIOTest' („SparkCore_WasbIOTest“ ausführen) aus, um eine lokale Ausführung zu starten.

  2. Nach Abschluss der lokalen Ausführung sehen Sie, dass die Ausgabedatei in Ihrem aktuellen Projekt-Explorer im Verzeichnis data>default gespeichert wurde.

    Intellij Project local run result.

  3. Unsere Tools legen die Standardkonfiguration für die lokale Ausführung automatisch fest, wenn Sie die lokale Ausführung und lokales Debuggen durchführen. Öffnen Sie die Konfiguration [Spark on HDInsight] XXX ([Spark auf HDInsight] XXX). In der oberen rechten Ecke sehen Sie, dass [Spark auf HDInsight] XXX bereits unter Apache Spark on HDInsight (Apache Spark auf HDInsight) erstellt wurde. Wechseln Sie zur Registerkarte Lokal ausführen.

    Intellij Run debug configurations local run.

    • Environment variables (Umgebungsvariablen): Wenn Sie die Systemumgebungsvariable HADOOP_HOME bereits auf C:\WinUtils festgelegt haben, kann automatisch festgestellt werden, dass eine manuelle Hinzufügung nicht erforderlich ist.
    • WinUtils.exe Location (Speicherort von „WinUtils.exe“): Wenn Sie die Systemumgebungsvariable nicht festgelegt haben, können Sie den Speicherort durch Klicken auf die zugehörige Schaltfläche finden.
    • Wählen Sie eine der beiden Optionen aus. Unter macOS und Linux sind diese nicht erforderlich.
  4. Sie können die Konfiguration auch manuell vor der lokalen Ausführung und dem lokalen Debuggen festlegen. Wählen Sie im obigen Screenshot das Pluszeichen ( + ). Wählen Sie dann die Option Apache Spark auf HDInsight aus. Geben Sie Informationen für Name und Main class name (Name der Hauptklasse) für den Speichervorgang ein, und klicken Sie dann auf die Schaltfläche für die lokale Ausführung.

Durchführen eines lokalen Debuggens

  1. Öffnen Sie das Skript SparkCore_wasbloTest, und legen Sie Breakpoints fest.

  2. Klicken Sie mit der rechten Maustaste auf den Skript-Editor, und wählen Sie dann die Option Debug „[Spark on HDInsight]XXX“ („[Spark auf HDInsight]XXX“ debuggen), um das lokale Debuggen zu starten.

Remoteausführung

  1. Navigieren Sie zu Ausführen>Konfigurationen bearbeiten. Über dieses Menü können Sie die Konfigurationen für das Remotedebuggen erstellen und bearbeiten.

  2. Klicken Sie im Dialogfeld Run/Debug Configurations (Konfigurationen ausführen/debuggen) auf das Plussymbol ( + ). Wählen Sie dann die Option Apache Spark auf HDInsight aus.

    Intellij Add new configuration.

  3. Wechseln Sie zur Registerkarte Remotely Run in Cluster (Im Cluster remote ausführen). Geben Sie Informationen für Name, Spark cluster und Main class name (Name der main-Klasse) ein. Klicken Sie dann auf Erweiterte Konfiguration (Remotedebuggen) . Unseren Tools unterstützen das Debuggen mit Executors. Die numExecutors, der Standardwert ist 5. Sie sollten ihn nicht auf einen größeren Wert als 3 festlegen.

    Intellij Run debug configurations.

  4. Wählen Sie im Teil Erweiterte Konfiguration (Remotedebuggen)Remotedebuggen für Spark aktivieren aus. Geben Sie den SSH-Benutzernamen und anschließend ein Kennwort ein, oder verwenden Sie eine private Schlüsseldatei. Wenn Sie das Remotedebuggen durchführen möchten, müssen Sie diesen Wert festlegen. Dies ist nicht notwendig, wenn Sie nur die Remoteausführung verwenden möchten.

    Intellij Advanced Configuration enable spark remote debug.

  5. Die Konfiguration wird jetzt unter dem von Ihnen angegebenen Namen gespeichert. Um die Konfigurationsdetails anzuzeigen, wählen Sie den Konfigurationsnamen aus. Um Änderungen vorzunehmen, wählen Sie Edit Configurations (Konfigurationen bearbeiten) aus.

  6. Nachdem Sie die Konfigurationseinstellungen abgeschlossen haben, können Sie das Projekt für den Remotecluster ausführen oder das Remotedebuggen durchführen.

    Intellij Debug Remote Spark Job Remote run button.

  7. Klicken Sie auf die Schaltfläche Trennen, damit Die Übermittlungsprotokolle nicht im linken Bereich angezeigt werden. Die Ausführung wird jedoch auf dem Back-End fortgesetzt.

    Intellij Debug Remote Spark Job Remote run result.

Remotedebuggen

  1. Richten Sie Breakpoints ein, und klicken Sie dann auf das Symbol Remotedebuggen. Der Unterschied bei der Remoteübermittlung besteht darin, dass der SSH-Benutzername und das Kennwort konfiguriert werden müssen.

    Intellij Debug Remote Spark Job debug icon.

  2. Wenn die Programmausführung den Breakpoint erreicht, werden eine Registerkarte Driver (Treiber) und zwei Registerkarten Executor im Bereich Debugger angezeigt. Klicken Sie auf das Symbol Resume Program (Programm fortsetzen), um die Ausführung des Codes fortzusetzen. Die Ausführung erreicht dann den nächsten Breakpoint. Sie müssen zur richtigen Executor-Registerkarte wechseln, um den Zielexecutor für das Debuggen zu finden. Sie können die Ausführungsprotokolle auf der entsprechenden Registerkarte Console (Konsole) anzeigen.

    Intellij Debug Remote Spark Job Debugging tab.

Remotedebuggen und Beheben von Fehlern

  1. Richten Sie zwei Breakpoints ein, und klicken Sie dann auf das Symbol Debug (Debuggen), um das Remotedebuggen zu starten.

  2. Der Code wird am ersten Breakpoint angehalten, und die Informationen zu Parametern und Variablen werden im Bereich Variables (Variablen) angezeigt.

  3. Klicken Sie auf das Symbol Resume Program (Programm fortsetzen), um die Ausführung fortzusetzen. Der Code wird am zweiten Punkt beendet. Die Ausnahme wird wie erwartet abgefangen.

    Intellij Debug Remote Spark Job throw error.

  4. Klicken Sie erneut auf das Symbol Resume Program (Programm fortsetzen). Im Fenster HDInsight Spark Submission (HDInsight Spark-Übermittlung) wird ein Fehler bei der Auftragsausführung angezeigt.

    Intellij Debug Remote Spark Job Error submission.

  5. Um den Wert der Variablen mithilfe der Debugfunktion von IntelliJ dynamisch zu aktualisieren, wählen Sie erneut Debug (Debuggen) aus. Der Bereich Variables (Variablen) wird wieder angezeigt.

  6. Klicken Sie mit der Maustaste auf die Registerkarte Debug, und wählen Sie dann Set Value (Wert festlegen) aus. Als Nächstes geben Sie einen neuen Wert für die Variable ein. Wählen Sie dann Enter (Eingabe) aus, um den Wert zu speichern.

    Intellij Debug Remote Spark Job set value.

  7. Klicken Sie auf das Symbol Resume Program (Programm fortsetzen), um die Programmausführung fortzusetzen. Dieses Mal wird keine Ausnahme abgefangen. Sie können sehen, dass das Projekt erfolgreich und ohne Ausnahmen ausgeführt wird.

    Intellij Debug Remote Spark Job without exception.

Nächste Schritte

Szenarien

Erstellen und Ausführen von Anwendungen

Tools und Erweiterungen

Ressourcen verwalten