Eseguire il debug di applicazioni Apache Spark in un cluster HDInsight con Azure Toolkit for IntelliJ tramite SSH

Questo articolo contiene istruzioni dettagliate su come usare gli strumenti HDInsight in Azure Toolkit for IntelliJ per eseguire il debug remoto di applicazioni in un cluster di HDInsight.

Prerequisiti

Creare un'applicazione Spark Scala

  1. Avviare IntelliJ IDEA e selezionare Crea nuovo progetto per aprire la finestra Nuovo progetto.

  2. Selezionare Apache Spark/HDInsight nel riquadro sinistro.

  3. Selezionare Progetto Spark con esempi (Scala) nella finestra principale.

  4. Nell'elenco Strumento di compilazione selezionare uno degli strumenti seguenti:

    • Maven, per ottenere supporto per la creazione guidata di un progetto Scala.
    • SBT, per la gestione delle dipendenze e la compilazione per il progetto Scala.

    Intellij Create New Project Spark.

  5. Selezionare Avanti.

  6. Nella finestra Nuovo progetto successiva specificare le informazioni seguenti:

    Proprietà Descrizione
    Nome progetto Immetti un nome. Questa procedura dettagliata usa myApp.
    Posizione del progetto Immettere il percorso desiderato in cui salvare il progetto.
    Project SDK (SDK progetto) Se vuoto, selezionare Nuovo e passare a JDK.
    Versione Spark La creazione guidata integra la versione corretta dell'SDK di Spark e Scala. Se la versione del cluster Spark è precedente alla 2.0, selezionare Spark 1.x. In caso contrario, selezionare Spark 2.x.. In questo esempio viene usata la versione Spark 2.3.0 (Scala 2.11.8).

    Intellij New Project select Spark version.

  7. Selezionare Fine. Potrebbero occorrere alcuni minuti prima che il progetto diventi disponibile. Osservare l'angolo inferiore destro per lo stato di avanzamento.

  8. Espandere il progetto e passare all'esempio scala>principale>di src.> Fare doppio clic su SparkCore_WasbIOTest.

Eseguire l'esecuzione in locale

  1. Nello script SparkCore_WasbIOTest fare clic con il pulsante destro del mouse sull'editor di script e quindi selezionare l'opzione Esegui 'SparkCore_WasbIOTest' per eseguire l'esecuzione locale.

  2. Dopo aver completato l'esecuzione in locale, è possibile visualizzare il file di output salvato nella directory data>default della finestra di gestione del progetto corrente.

    Intellij Project local run result.

  3. Per questi strumenti la configurazione dell'esecuzione in locale predefinita viene impostata automaticamente quando l'esecuzione e il debug vengono eseguiti in modalità locale. Aprire la configurazione [Spark in HDInsight] XXX nell'angolo in alto a destra. È possibile visualizzare [ Spark in HDInsight]XXX già creato in Apache Spark in HDInsight. Passare alla scheda Locally Run (Esecuzione in locale).

    Intellij Run debug configurations local run.

    • Environment variables (Variabili di ambiente): se la variabile di ambiente di sistema HADOOP_HOME è già stata impostata su C:\WinUtils, viene automaticamente rilevato che l'aggiunta manuale non è necessaria.
    • WinUtils.exe Location (Posizione WinUtils.exe): se la variabile di ambiente di sistema non è stata impostata, per trovare la posizione è sufficiente fare clic sul relativo pulsante.
    • È sufficiente scegliere una delle due opzioni, che non sono necessarie in MacOS e Linux.
  4. È anche possibile impostare la configurazione manualmente prima di eseguire l'esecuzione e il debug in modalità locale. Nello screenshot precedente selezionare il segno più (+). Selezionare quindi l'opzione Apache Spark in HDInsight . Immettere le informazioni per il nome e il nome della classe principale da salvare e quindi fare clic sul pulsante Esecuzione in locale.

Eseguire il debug in locale

  1. Aprire lo script SparkCore_wasbloTest e impostare i punti di interruzione.

  2. Fare clic con il pulsante destro del mouse sull'editor di script e quindi selezionare l'opzione Debug '[Spark in HDInsight]XXX' per eseguire il debug locale.

Esecuzione remota

  1. Passare a Esegui>configurazioni di modifica.... Da questo menu è possibile creare o modificare le configurazioni per il debug remoto.

  2. Nella finestra di dialogo Run/Debug Configurations (Esegui/Debug delle configurazioni) selezionare il segno più (+). Selezionare quindi l'opzione Apache Spark in HDInsight .

    Intellij Add new configuration.

  3. Passare alla scheda Esecuzione remota nel cluster . Immettere le informazioni per Nome, Cluster Spark e Nome classe principale. Fare quindi clic su Configurazione avanzata (debug remoto). Questi strumenti supportano il debug con executor. Il valore predefinito della chiave numExectors è 5. È consigliabile non impostarlo su un valore maggiore di 3.

    Intellij Run debug configurations.

  4. Nella parte Configurazione avanzata (debug remoto) selezionare Abilita debug remoto Spark. Immettere il nome utente SSH e inserire una password oppure usare un file di chiave privata. Se si desidera eseguire il debug in modalità remota, è necessario impostare questa opzione. Non è necessario impostarla se si desidera usare l'esecuzione in modalità remota.

    Intellij Advanced Configuration enable spark remote debug.

  5. A questo punto, la configurazione viene salvata con il nome specificato. Per visualizzare i dettagli della configurazione, selezionare il relativo nome. Per apportare modifiche, selezionare Modifica configurazioni.

  6. Dopo aver completato le impostazioni di configurazione, è possibile eseguire il progetto con il cluster remoto oppure eseguire il debug remoto.

    Intellij Debug Remote Spark Job Remote run button.

  7. Fare clic sul pulsante Disconnetti. I log di invio non vengono visualizzati nel riquadro sinistro, ma l'esecuzione è ancora in corso nel back-end.

    Intellij Debug Remote Spark Job Remote run result.

Eseguire l'esecuzione da remoto

  1. Impostare i punti di interruzione e quindi fare clic sull'icona Remote debug (Debug remoto). La differenza rispetto all'invio remoto risiede nel fatto che non è necessario configurare il nome utente/password SSH.

    Intellij Debug Remote Spark Job debug icon.

  2. Quando l'esecuzione del programma raggiunge il punto di interruzione, nel riquadro Debugger vengono visualizzate la scheda Diver e le due schede Executor. Selezionare l'icona Resume Program (Riprendi programma) per continuare l'esecuzione del codice, che raggiungerà il punto di interruzione successivo. È necessario passare alla scheda Executor (Esecutore) corretta per trovare l'esecutore di destinazione da sottoporre a debug. È possibile visualizzare i log di esecuzione nella scheda Console corrispondente.

    Intellij Debug Remote Spark Job Debugging tab.

Eseguire il debug e la correzione di bug da remoto

  1. Impostare due punti di interruzione e quindi selezionare l'icona Debug per avviare il processo di debug remoto.

  2. Il codice si interrompe in corrispondenza del primo punto di interruzione e le informazioni di parametro e variabile vengono visualizzate nella finestra Variables (Variabili).

  3. Selezionare l'icona Resume Program (Riprendi programma) per continuare. Il codice si interrompe in corrispondenza del secondo punto. L'eccezione viene rilevata come previsto.

    Intellij Debug Remote Spark Job throw error.

  4. Selezionare di nuovo l'icona Resume Program (Riprendi programma). La finestra HDInsight Spark Submission (Invio Spark in HDInsight) mostra un errore di "esecuzione processo non riuscita".

    Intellij Debug Remote Spark Job Error submission.

  5. Per aggiornare dinamicamente il valore della variabile usando la funzionalità di debug di IntelliJ, selezionare nuovamente Debug. Viene visualizzato di nuovo il riquadro Variables (Variabili).

  6. Fare clic con il pulsante destro del mouse sulla destinazione nella scheda Debug, quindi selezionare Imposta valore. Successivamente inserire un nuovo valore per la variabile. e selezionare Invia per salvarlo.

    Intellij Debug Remote Spark Job set value.

  7. Selezionare l'icona Resume Program (Riprendi programma) per continuare a eseguire il programma. Questa volta, non viene rilevata alcuna eccezione. È possibile notare come il progetto venga eseguito correttamente senza eccezioni.

    Intellij Debug Remote Spark Job without exception.

Passaggi successivi

Scenari

Creare ed eseguire applicazioni

Strumenti ed estensioni

Gestione risorse