Usare Azure Toolkit for IntelliJ per creare applicazioni Spark per il cluster HDInsight

Usare il plug-in Toolkit di Azure per IntelliJ per sviluppare applicazioni Spark scritte in Scala e inoltrarle a un cluster HDInsight Spark direttamente dall'IDE IntelliJ. È possibile usare il plug-in in diversi modi:

  • Per sviluppare e inviare un'applicazione Spark in Scala in un cluster HDInsight Spark
  • Per accedere alle risorse cluster HDInsight Spark di Azure
  • Per sviluppare ed eseguire un'applicazione Spark in Scala localmente

È possibile seguire questo video per creare il progetto.

Importante

Questo plug-in può essere usato per creare e inviare applicazioni solo per cluster HDInsight Spark in Linux.

Prerequisiti

Installare il Toolkit di Azure per IntelliJ

Per le istruzioni di installazione vedere Installazione del Toolkit di Azure per IntelliJ.

Accedere alla sottoscrizione di Azure.

  1. Avviare l'IDE IntelliJ e aprire Azure Explorer. Nel menu Visualizza fare clic su Finestre degli strumenti e quindi su Azure Explorer.

    Comandi selezionati nel menu Visualizza

  2. Fare clic con il pulsante destro del mouse sul nodo Azure, quindi fare clic su Accedi.
  3. Nella finestra di dialogo di Azure Sign In (Accesso ad Azure) fare clic su Sign-in (Accedi) e immettere le credenziali di Azure. Finestra di dialogo di accesso di Azure
  4. Dopo l'accesso, la finestra di dialogo Selezionare le sottoscrizioni elenca tutte le sottoscrizioni di Azure associate alle credenziali. Fare clic su Seleziona per chiudere la finestra di dialogo.

    Finestra di dialogo Selezionare le sottoscrizioni

  5. Nella scheda Azure Explorer espandere HDInsight per visualizzare i cluster HDInsight Spark nella sottoscrizione.

    Cluster HDInsight Spark in Azure Explorer

  6. È possibile espandere ancora un nodo del nome cluster per vedere le risorse, ad esempio gli account di archiviazione, associate al cluster.

    Espansione di un nome del cluster per vedere le risorse

Eseguire un'applicazione Spark in Scala in un cluster HDInsight Spark

  1. Avviare IntelliJ IDEA e creare un progetto. Nella finestra di dialogo New Project (Nuovo progetto) selezionare le opzioni seguenti e quindi fare clic su Next (Avanti). Finestra di dialogo Nuovo progetto
    • Selezionare HDInsight nel riquadro sinistro.
    • Selezionare Spark on HDInsight (Scala)(Spark in HDInsight - Scala) nel riquadro destro.
    • Strumento di compilazione: la procedura guidata di creazione del progetto Scala supporta Maven o SBT per la gestione delle dipendenze e la compilazione per il progetto Scala. Selezionarne uno in base alle necessità.
  2. La creazione guidata del progetto Scala rileva automaticamente se è installato il plug-in Scala. Fare clic su Installa per continuare.

    Controllo di Scala

  3. Fare clic su OK per scaricare il plug-in Scala. Seguire le istruzioni per riavviare IntelliJ.

    Installazione di Scala

  4. Nella finestra successiva inserire i dettagli di progetto seguenti e quindi fare clic su Finish (Fine).
    Selezione di Spark SDK

    • Specificare un nome per il progetto e il relativo percorso.
    • Per Project SDK, usare Java 1.8 per cluster Spark 2.x, Java 1.7 per cluster Spark 1.x.
    • Per la Versione di Spark, la creazione guidata del progetto Scala integra la versione corretta per Spark SDK e Scala SDK. Se la versione del cluster Spark è inferiore a 2.0, scegliere Spark 1.x. In caso contrario, selezionare Spark 2.x. In questo esempio viene usata la versione Spark 2.0.2 (Scala 2.11.8).
  5. Il progetto Spark crea automaticamente un elemento. Per visualizzare l'elemento, seguire questa procedura:

    1. Fare clic su Project Structure (Struttura progetto) nel menu File.
    2. Nella finestra di dialogo Project Structure (Struttura progetto) fare clic su Artifacts (Elementi) per visualizzare l'elemento predefinito creato. È anche possibile creare un elemento personalizzato facendo clic sull'icona +. Informazioni sull'elemento nella finestra di dialogo
  6. Aggiungere il codice sorgente dell'applicazione.

    1. In Project Explorer (Esplora progetti) fare clic con il pulsante destro del mouse su src, puntare a New (Nuovo) e quindi fare clic su Scala class (Classe Scala).

      Comandi per la creazione di una classe Scala in Project Explorer (Esplora progetti)

    2. Nella finestra di dialogo Create New Scala Class (Crea nuova classe Scala) immettere un nome, selezionare Object (Oggetto) per il campo Kind (Tipologia) e quindi fare clic su OK.

      Finestra di dialogo Create New Scala Class (Crea nuova classe Scala)

    3. Nel file MyClusterApp.scala incollare il codice seguente. Questo codice legge i dati dal file HVAC.csv, disponibile in tutti i cluster HDInsight Spark, recupera le righe con una sola cifra nella settima colonna del file CSV e scrive l'output in /HVACOut nel contenitore di archiviazione predefinito per il cluster.

        import org.apache.spark.SparkConf
        import org.apache.spark.SparkContext
      
        object MyClusterApp{
          def main (arg: Array[String]): Unit = {
            val conf = new SparkConf().setAppName("MyClusterApp")
            val sc = new SparkContext(conf)
      
            val rdd = sc.textFile("wasb:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv")
      
            //find the rows that have only one digit in the seventh column in the CSV file
            val rdd1 =  rdd.filter(s => s.split(",")(6).length() == 1)
      
            rdd1.saveAsTextFile("wasb:///HVACOut")
          }
      
        }
      
  7. Eseguire l'applicazione in un cluster HDInsight Spark.

    1. In Project Explorer (Esplora progetti) fare clic con il pulsante destro del mouse sul nome del progetto e quindi scegliere Submit Spark Application to HDInsight (Invia applicazione Spark a HDInsight).

      Selezione di Submit Spark Application to HDInsight (Invia applicazione Spark a HDInsight)

    2. Viene richiesto di immettere le credenziali della sottoscrizione di Azure. Nella finestra di dialogo Spark Submission (Invio Spark) specificare i valori seguenti e fare clic su Submit (Invia).

      • Per Spark clusters (Linux only)(Cluster Spark - solo Linux) selezionare il cluster Spark HDInsight in cui eseguire l'applicazione.
      • Selezionare un elemento nel progetto IntelliJ oppure selezionarne uno dal disco rigido.
      • Nella casella Main class name (Nome classe principale) fare clic sui puntini di sospensione (puntini di sospensione), selezionare la classe principale nel codice sorgente dell'applicazione e quindi fare clic su OK. Finestra di dialogo selezione classe principale
      • Poiché il codice dell'applicazione in questo esempio non richiede argomenti della riga di comando e non fa riferimento a JAR o altri file, è possibile lasciare vuote le rimanenti caselle di testo. Dopo aver dato tutti gli input, la finestra di dialogo sarà simile all'immagine seguente.

        Finestra di dialogo di invio di Spark

    3. Nella scheda Spark Submission (Invio Spark) nella parte inferiore della finestra verrà visualizzato lo stato di avanzamento. È anche possibile arrestare l'applicazione facendo clic sul pulsante rosso nella finestra Spark Submission (Invio Spark).

      Finestra di invio di Spark

      Più avanti in questo articolo, nella sezione "Accedere e gestire i cluster HDInsight Spark tramite il Toolkit di Azure per IntelliJ" viene spiegato come accedere all'output del processo.

Eseguire o eseguire il debug come un'applicazione Spark in Scala in un cluster HDInsight Spark

Si consiglia inoltre di usare un altro modo per inviare l'applicazione Spark al cluster. Impostando i parametri nell'IDE Run/Debug configrurations (Esegui/Esegui il debug delle configurazioni). Per altre informazioni vedere Eseguire il debug remoto delle applicazioni Spark su un cluster HDInsight con Azure Toolkit per IntelliJ tramite SSH

Scegliere Azure Data Lake Store come risorsa di archiviazione per l'applicazione Spark Scala

Se si desidera inviare un'applicazione ad Azure Data Lake Store, è necessario selezionare la modalità Interactive (Interattivo) durante l'accesso ad Azure.

Opzione Interactive (Interattivo) al momento dell'accesso

Se si seleziona la modalità Automated (Automatico), viene visualizzato l'errore seguente:

Errore di accesso

Accedere e gestire i cluster HDInsight Spark tramite il Toolkit di Azure per IntelliJ

È possibile eseguire diverse operazioni mediante il Toolkit Azure per IntelliJ.

Accedere alla visualizzazione del processo

  1. In Azure Explorer espandere HDInsight, espandere il nome del cluster Spark e quindi fare clic su Processi.
    Nodo vista processi
  2. Nel riquadro destro la scheda Spark Job View (Visualizzazione processi Spark) visualizza tutte le applicazioni eseguite nel cluster. Fare clic sul nome dell'applicazione per cui si desidera visualizzare altri dettagli. Dettagli applicazione
  3. Passare il mouse sul grafico del processo: vengono mostrate le informazioni di base del processo in esecuzione. Fare clic sul grafico del processo: viene visualizzato il grafico delle fasi e le informazioni generate da ogni processo. Dettagli della fase del processo

  4. I log usati di frequente che include informazioni della directory, del driver Stdout, del driver Stderr sono elencati nella scheda Log. Dettagli del log

  5. È anche possibile aprire l'interfaccia utente della cronologia di Spark e l'interfaccia utente di YARN, a livello di applicazione, facendo clic sui rispettivi collegamenti ipertestuali nella parte superiore della finestra.

Accedere al server della cronologia di Spark

  1. In Azure Explorer espandere HDInsight, fare clic con il pulsante destro del mouse sul nome del cluster Spark e quindi scegliere Open Spark History UI (Apri UI cronologia Spark). Quando richiesto, immettere le credenziali dell'amministratore per il cluster. È necessario specificare le credenziali durante il provisioning del cluster.
  2. Nel dashboard del server della cronologia di Spark è possibile usare il nome dell'applicazione per cercare l'applicazione di cui è appena stata completata l'esecuzione. Nel codice precedente, impostare il nome dell'applicazione usando val conf = new SparkConf().setAppName("MyClusterApp"). Il nome dell'applicazione Spark è MyClusterApp.

Avviare il portale di Ambari

  1. In Azure Explorer espandere HDInsight, fare clic con il pulsante destro del mouse sul nome del cluster Spark e quindi scegliere Open Cluster Management Portal (Ambari) (Apri il portale di gestione cluster - Ambari).
  2. Quando richiesto, immettere le credenziali dell'amministratore per il cluster. Queste credenziali sono state specificate durante il processo di provisioning del cluster.

Gestire le sottoscrizioni di Azure

Per impostazione predefinita, il Toolkit di Azure per IntelliJ elenca i cluster Spark di tutte le sottoscrizioni di Azure. Se necessario, è possibile specificare le sottoscrizioni per cui si vuole accedere al cluster.

  1. In Azure Explorer fare clic con il pulsante destro del mouse sul nodo radice Azure e quindi scegliere Gestisci sottoscrizioni.
  2. Nella finestra di dialogo deselezionare le caselle di controllo della sottoscrizione alla quale non si vuole accedere e quindi fare clic su Chiudi. È anche possibile fare clic su Esci per uscire dalla sessione di sottoscrizione di Azure.

Eseguire un'applicazione Spark in Scala localmente

È possibile usare il Toolkit di Azure per IntelliJ per eseguire applicazioni Spark Scala localmente nella workstation. Tali applicazioni in genere non richiedono l'accesso a risorse del cluster quali il contenitore di archiviazione e possono essere eseguite e testate localmente.

Prerequisito

Quando si esegue l'applicazione Spark Scala locale in un computer Windows, è possibile che venga restituita un'eccezione, come spiegato in SPARK 2356, che si verifica a causa di un file WinUtils.exe mancante in Windows.

Per risolvere questo errore, è necessario scaricare il file eseguibile in un percorso come C:\WinUtils\bin. È quindi necessario aggiungere una variabile di ambiente HADOOP_HOME e impostare il valore della variabile su C\WinUtils.

Eseguire un'applicazione Spark in Scala locale

  1. Avviare IntelliJ IDEA e creare un progetto. Nella finestra di dialogo New Project (Nuovo progetto) selezionare le opzioni seguenti e quindi fare clic su Next (Avanti).

    • Selezionare HDInsight nel riquadro sinistro.
    • Selezionare Spark on HDInsight Local Run Sample (Scala) (Esecuzione locale di esempio Spark in HDInsight - Scala) nel riquadro destro.
    • Strumento di compilazione: la procedura guidata di creazione del progetto Scala supporta Maven o SBT per la gestione delle dipendenze e la compilazione per il progetto Scala. Selezionarne uno in base alle necessità. Finestra di dialogo selezioni nel nuovo progetto
  2. Nella finestra successiva inserire i dettagli di progetto seguenti e quindi fare clic su Finish (Fine).

    • Specificare un nome per il progetto e il relativo percorso.
    • In Project SDK (SDK progetto) assicurarsi di specificare una versione di Java successiva alla 7.
    • Per la Versione di Spark, selezionare la versione di Scala da usare: Scala 2.11.x per Spark 2.0 e Scala 2.10.x per Spark 1.6. Selezione di Spark SDK
  3. Il modello aggiunge un codice di esempio (LogQuery) sotto la cartella src eseguibile in locale nel computer in uso.

    Percorso di LogQuery

  4. Fare clic con il pulsante destro del mouse sull'applicazione LogQuery e quindi scegliere Run 'LogQuery' (Esegui "LogQuery"). Viene visualizzato un output simile al seguente nella scheda Run (Esegui) in basso.

    Risultato dell'esecuzione locale dell'applicazione Spark

Convertire le applicazioni IntelliJ IDEA esistenti per usare il Toolkit di Azure per IntelliJ

È possibile convertire le applicazioni Spark Scala esistenti create in IntelliJ IDEA per renderle compatibili il Toolkit di Azure per IntelliJ. È possibile usare il plug-in per inviare le applicazioni a un cluster HDInsight Spark.

  1. Per un'applicazione Spark Scala esistente creata tramite IntelliJ IDEA, aprire il file con estensione IML associato.
  2. A livello di radice viene visualizzato un elemento module simile al seguente:

     <module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
    

    Modificare l'elemento per aggiungere UniqueKey="HDInsightTool" in modo che l'elemento module sia simile al seguente:

     <module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4" UniqueKey="HDInsightTool">
    
  3. Salvare le modifiche. L'applicazione dovrebbe ora essere compatibile con il Toolkit di Azure per IntelliJ. È possibile verificarlo facendo clic con il pulsante destro del mouse sul nome del progetto in Project Explorer (Esplora progetti). Nel menu a comparsa viene ora visualizzata l'opzione Submit Spark Application to HDInsight(Invia applicazione Spark a HDInsight).

Risoluzione dei problemi

Errore relativo all'uso di dimensioni heap maggiori nell'esecuzione locale

Se in Spark 1.6 si usa un SDK per Java a 32 bit durante l'esecuzione locale, è possibile riscontrare gli errori seguenti:

Exception in thread "main" java.lang.IllegalArgumentException: System memory 259522560 must be at least 4.718592E8. Please use a larger heap size.
    at org.apache.spark.memory.UnifiedMemoryManager$.getMaxMemory(UnifiedMemoryManager.scala:193)
    at org.apache.spark.memory.UnifiedMemoryManager$.apply(UnifiedMemoryManager.scala:175)
    at org.apache.spark.SparkEnv$.create(SparkEnv.scala:354)
    at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:193)
    at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:288)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:457)
    at LogQuery$.main(LogQuery.scala:53)
    at LogQuery.main(LogQuery.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

Questi errori si verificano perché le dimensioni heap non sono sufficientemente grandi da consentire l'esecuzione di Spark. Spark richiede almeno 471 MB. È possibile avere altri dettagli in SPARK-12081. Una soluzione semplice consiste nell'uso di un SDK per Java a 64 bit. È anche possibile modificare le impostazioni JVM in IntelliJ aggiungendo le opzioni seguenti:

-Xms128m -Xmx512m -XX:MaxPermSize=300m -ea

Aggiunta di opzioni alla casella "VM options" (Opzioni della macchina virtuale) in IntelliJ

Commenti, suggerimenti e problemi noti

Il supporto della visualizzazione diretta degli output di Spark non è al momento disponibile.

Per eventuali commenti o suggerimenti oppure se si riscontrano problemi nell'uso di questo strumento, inviare un messaggio di posta elettronica all'indirizzo hdivstool@microsoft.com.

Vedere anche

Demo

Scenari

Creazione ed esecuzione di applicazioni

Strumenti ed estensioni

Gestione delle risorse