Använda Azure Toolkit for IntelliJ för att skapa Apache Spark-program för HDInsight-kluster

Den här artikeln visar hur du utvecklar Apache Spark-program i Azure HDInsight med hjälp av Azure Toolkit-plugin-programmet för IntelliJ IDE. Azure HDInsight är en hanterad analystjänst med öppen källkod i molnet. Med tjänsten kan du använda ramverk med öppen källkod som Hadoop, Apache Spark, Apache Hive och Apache Kafka.

Du kan använda Azure Toolkit-plugin-programmet på några olika sätt:

  • Utveckla och skicka ett Scala Spark-program till ett HDInsight Spark-kluster.
  • Få åtkomst till dina Azure HDInsight Spark-klusterresurser.
  • Utveckla och köra ett Scala Spark-program lokalt.

I den här artikeln kan du se hur du:

  • Använda plugin-programmet Azure Toolkit for IntelliJ
  • Utveckla Apache Spark-program
  • Skicka ett program till Azure HDInsight-kluster

Förutsättningar

Installera plugin-programmet Scala för IntelliJ IDEA

Steg för att installera Scala-plugin-programmet:

  1. Öppna IntelliJ IDEA.

  2. På välkomstskärmen går du till Konfigurera>Plugin-program för att öppna fönstret Plugin-program.

    IntelliJ IDEA enables scala plugin.

  3. Välj Installera för det Scala-plugin-program som visas i det nya fönstret.

    IntelliJ IDEA installs scala plugin.

  4. Du måste starta om IDE när plugin-programmet har installerats.

Skapa ett Spark Scala-program för ett HDInsight Spark-kluster

  1. Starta IntelliJ IDEA och välj Skapa nytt projekt för att öppna fönstret Nytt projekt.

  2. Välj Azure Spark/HDInsight i den vänstra rutan.

  3. Välj Spark-projekt (Scala) i huvudfönstret.

  4. Välj något av följande alternativ i listrutan Build tool (Skapa verktyg ):

    • Maven för guidestöd när du skapar Scala-projekt.

    • SBT för att hantera beroenden när du skapar Scala-projektet.

      IntelliJ IDEA New Project dialog box.

  5. Välj Nästa.

  6. I fönstret Nytt projekt anger du följande information:

    Property beskrivning
    Projektnamn Ange ett namn. Den här artikeln använder myApp.
    Projektplats Ange platsen där projektet ska sparas.
    Projekt-SDK Det här fältet kan vara tomt vid din första användning av IDEA. Välj Nytt... och navigera till din JDK.
    Spark-version Skapandeguiden integrerar rätt version för Spark SDK och Scala SDK. Om Sparks klusterversion är äldre än 2.0 väljer du Spark 1.x. Annars väljer du Spark 2.x. I det här exemplet används Spark 2.3.0 (Scala 2.11.8).

    Selecting the Apache Spark SDK.

  7. Välj Slutför. Det kan ta några minuter innan projektet blir tillgängligt.

  8. Spark-projektet skapar automatiskt en artefakt åt dig. Gör följande för att visa artefakten:

    a. Från menyraden går du till Filprojektstruktur>....

    b. I fönstret Projektstruktur väljer du Artefakter.

    c. Välj Avbryt när du har sett artefakten.

    Artifact info in the dialog box.

  9. Lägg till programmets källkod genom att göra följande:

    a. Från Project navigerar du till myApp>src>main>scala.

    b. Högerklicka på scala och gå sedan till Ny>Scala-klass.

    Commands for creating a Scala class from Project.

    c. I dialogrutan Skapa ny Scala-klass anger du ett namn, väljer Objekt i listrutan Typ och väljer sedan OK.

    Create New Scala Class dialog box.

    d. Filen myApp.scala öppnas sedan i huvudvyn. Ersätt standardkoden med koden som finns nedan:

    import org.apache.spark.SparkConf
    import org.apache.spark.SparkContext
    
    object myApp{
        def main (arg: Array[String]): Unit = {
        val conf = new SparkConf().setAppName("myApp")
        val sc = new SparkContext(conf)
    
        val rdd = sc.textFile("wasbs:///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("wasbs:///HVACOut")
        }
    
    }
    

    Koden läser data från HVAC.csv (finns i alla HDInsight Spark-kluster), hämtar de rader som bara har en siffra i den sjunde kolumnen i CSV-filen och skriver utdata till /HVACOut under standardlagringscontainern för klustret.

Anslut till ditt HDInsight-kluster

Användaren kan antingen logga in på din Azure-prenumeration eller länka ett HDInsight-kluster. Använd Ambari-användarnamnet/lösenordet eller domänanslutna autentiseringsuppgifter för att ansluta till ditt HDInsight-kluster.

Logga in till din Azure-prenumeration

  1. Från menyraden går du till Visa>verktyg Windows>Azure Explorer.

    IntelliJ IDEA shows azure explorer.

  2. Högerklicka på Azure-noden i Azure Explorer och välj sedan Logga in.

    IntelliJ IDEA explorer right-click azure.

  3. I dialogrutan Azure-inloggning väljer du Enhetsinloggning och sedan Logga in.

    `IntelliJ IDEA azure sign-in device login`.

  4. I dialogrutan Azure Device Login (Azure Device Login) klickar du på Kopiera och öppna.

    `IntelliJ IDEA azure device login`.

  5. I webbläsargränssnittet klistrar du in koden och klickar sedan på Nästa.

    `Microsoft enter code dialog for HDI`.

  6. Ange dina Azure-autentiseringsuppgifter och stäng sedan webbläsaren.

    `Microsoft enter e-mail dialog for HDI`.

  7. När du har loggat in visas alla Azure-prenumerationer som är associerade med autentiseringsuppgifterna i dialogrutan Välj prenumerationer . Välj din prenumeration och välj sedan knappen Välj .

    The Select Subscriptions dialog box.

  8. Från Azure Explorer expanderar du HDInsight för att visa DE HDInsight Spark-kluster som finns i dina prenumerationer.

    IntelliJ IDEA Azure Explorer main view.

  9. Om du vill visa de resurser (till exempel lagringskonton) som är associerade med klustret kan du ytterligare expandera en klusternamnsnod.

    Azure Explorer storage accounts.

Du kan länka ett HDInsight-kluster med hjälp av det Apache Ambari-hanterade användarnamnet. På samma sätt kan du för ett domänanslutet HDInsight-kluster länka med hjälp av domänen och användarnamnet, till exempel user1@contoso.com. Du kan också länka Livy Service-kluster.

  1. Från menyraden går du till Visa>verktyg Windows>Azure Explorer.

  2. Högerklicka på HDInsight-noden i Azure Explorer och välj sedan Länka ett kluster.

    Azure Explorer link cluster context menu.

  3. De tillgängliga alternativen i fönstret Länka ett kluster varierar beroende på vilket värde du väljer i listrutan Länkresurstyp . Ange dina värden och välj sedan OK.

    • HDInsight-kluster

      Property Värde
      Länkresurstyp Välj HDInsight-kluster i listrutan.
      Klusternamn/URL Ange klusternamn.
      Autentiseringstyp Lämna som grundläggande autentisering
      Användarnamn Ange klusteranvändarnamn, standard är administratör.
      Lösenord Ange lösenord som användarnamn.

      IntelliJ IDEA link a cluster dialog.

    • Livy Service

      Property Värde
      Länkresurstyp Välj Livy Service i listrutan.
      Livy-slutpunkt Ange Livy-slutpunkt
      Klusternamn Ange klusternamn.
      Yarn-slutpunkt Valfritt.
      Autentiseringstyp Lämna som grundläggande autentisering
      Användarnamn Ange klusteranvändarnamn, standard är administratör.
      Lösenord Ange lösenord som användarnamn.

      IntelliJ IDEA link Livy cluster dialog.

  4. Du kan se ditt länkade kluster från HDInsight-noden .

    Azure Explorer linked cluster1.

  5. Du kan också ta bort länken till ett kluster från Azure Explorer.

    Azure Explorer unlinked cluster.

Köra ett Spark Scala-program i ett HDInsight Spark-kluster

När du har skapat ett Scala-program kan du skicka det till klustret.

  1. Från Project går du till myApp>src>main>scala>myApp. Högerklicka på myApp och välj Skicka Spark-program (det kommer sannolikt att finnas längst ned i listan).

    The Submit Spark Application to HDInsight command.

  2. I dialogrutan Skicka Spark-program väljer du 1. Spark på HDInsight.

  3. I fönstret Redigera konfiguration anger du följande värden och väljer sedan OK:

    Property Värde
    Spark-kluster (endast Linux) Välj det HDInsight Spark-kluster som du vill köra programmet på.
    Välj en artefakt som ska skickas Låt standardinställningen vara kvar.
    Huvudklassnamn Standardvärdet är huvudklassen från den valda filen. Du kan ändra klassen genom att välja ellipsen(...) och välja en annan klass.
    Jobbkonfigurationer Du kan ändra standardnycklarna och eller värdena. Mer information finns i Apache Livy REST API.
    Kommandoradsargument Du kan ange argument avgränsade med blanksteg för huvudklassen om det behövs.
    Refererade jars och refererade filer Du kan ange sökvägarna för de refererade jar-filerna och filerna om det finns några. Du kan också bläddra bland filer i det virtuella Azure-filsystemet, som för närvarande endast stöder ADLS Gen 2-kluster. Mer information: Apache Spark-konfiguration. Se även Ladda upp resurser till kluster.
    Lagring för jobbuppladdning Expandera för att visa ytterligare alternativ.
    Lagringstyp Välj Använd Azure Blob för att ladda upp från listrutan.
    Lagringskonto Ange ditt lagringskonto.
    Lagringsnyckel Ange lagringsnyckeln.
    Lagringscontainer Välj din lagringscontainer i listrutan när lagringskontot och lagringsnyckeln har angetts.

    The Spark Submission dialog box.

  4. Välj SparkJobRun för att skicka projektet till det valda klustret. Fliken Fjärr-Spark-jobb i kluster visar jobbkörningens förlopp längst ned. Du kan stoppa programmet genom att klicka på den röda knappen.

    Apache Spark Submission window.

Felsöka Apache Spark-program lokalt eller via fjärranslutning i ett HDInsight-kluster

Vi rekommenderar också ett annat sätt att skicka Spark-programmet till klustret. Du kan göra det genom att ange parametrarna i IDE för körnings-/felsökningskonfigurationer . Se Felsöka Apache Spark-program lokalt eller via fjärranslutning i ett HDInsight-kluster med Azure Toolkit for IntelliJ via SSH.

Få åtkomst till och hantera HDInsight Spark-kluster med hjälp av Azure Toolkit for IntelliJ

Du kan utföra olika åtgärder med hjälp av Azure Toolkit for IntelliJ. De flesta åtgärderna startas från Azure Explorer. Från menyraden går du till Visa>verktyg Windows>Azure Explorer.

Få åtkomst till jobbvyn

  1. Från Azure Explorer går du till HDInsight><Dina klusterjobb>>.

    IntelliJ Azure Explorer Job view node.

  2. I den högra rutan visar fliken Spark-jobbvy alla program som kördes i klustret. Välj namnet på programmet som du vill se mer information för.

    Spark Job View Application details.

  3. Hovra över jobbdiagrammet om du vill visa grundläggande jobbinformation som körs. Om du vill visa stegdiagrammet och informationen som varje jobb genererar väljer du en nod i jobbdiagrammet.

    Spark Job View Job stage details.

  4. Om du vill visa loggar som används ofta, till exempel Driver Stderr, Driver Stdout och Directory Info, väljer du fliken Logg .

    Spark Job View Log details.

  5. Du kan visa användargränssnittet för Spark-historik och YARN-användargränssnittet (på programnivå). Välj en länk överst i fönstret.

Få åtkomst till Spark-historikservern

  1. Från Azure Explorer expanderar du HDInsight, högerklickar på ditt Spark-klusternamn och väljer sedan Öppna Användargränssnitt för Spark-historik.

  2. När du uppmanas att ange klustrets administratörsautentiseringsuppgifter, som du angav när du konfigurerade klustret.

  3. På instrumentpanelen för Spark-historikservern kan du använda programnamnet för att leta efter det program som du precis har kört. I föregående kod anger du programnamnet med hjälp val conf = new SparkConf().setAppName("myApp")av . Ditt Spark-programnamn är myApp.

Starta Ambari-portalen

  1. Från Azure Explorer expanderar du HDInsight, högerklickar på ditt Spark-klusternamn och väljer sedan Öppna klusterhanteringsportalen (Ambari).

  2. När du uppmanas att göra det anger du autentiseringsuppgifterna för administratören för klustret. Du angav dessa autentiseringsuppgifter under klusterkonfigurationsprocessen.

Hantera Azure-prenumerationer

Som standard listar Azure Toolkit for IntelliJ Spark-klustren från alla dina Azure-prenumerationer. Om det behövs kan du ange de prenumerationer som du vill komma åt.

  1. Högerklicka på Azure-rotnoden i Azure Explorer och välj sedan Välj prenumerationer.

  2. I fönstret Välj prenumerationer avmarkerar du kryssrutorna bredvid de prenumerationer som du inte vill komma åt och väljer sedan Stäng.

Spark-konsolen

Du kan köra Spark Local Console (Scala) eller köra Spark Livy Interactive Session Console (Scala).

Lokal Spark-konsol (Scala)

Kontrollera att du har uppfyllt WINUTILS.EXE förutsättning.

  1. Från menyraden går du till Kör>Redigera konfigurationer....

  2. I fönstret Kör/felsöka konfigurationer går du till Apache Spark på HDInsight>[Spark på HDInsight] myApp i den vänstra rutan.

  3. Välj fliken i Locally Run huvudfönstret.

  4. Ange följande värden och välj sedan OK:

    Property Värde
    Jobbets huvudklass Standardvärdet är huvudklassen från den valda filen. Du kan ändra klassen genom att välja ellipsen(...) och välja en annan klass.
    Miljövariabler Kontrollera att värdet för HADOOP_HOME är korrekt.
    WINUTILS.exe plats Kontrollera att sökvägen är korrekt.

    Local Console Set Configuration.

  5. Från Project går du till myApp>src>main>scala>myApp.

  6. Från menyraden går du till Verktyg>Spark-konsolen>Kör Spark Local Console(Scala).

  7. Sedan kan två dialogrutor visas för att fråga dig om du vill åtgärda beroenden automatiskt. I så fall väljer du Automatisk korrigering.

    IntelliJ IDEA Spark Auto Fix dialog1.

    IntelliJ IDEA Spark Auto Fix dialog2.

  8. Konsolen bör se ut ungefär som bilden nedan. I konsolfönstret skriver du sc.appNameoch trycker sedan på ctrl+Retur. Resultatet visas. Du kan avsluta den lokala konsolen genom att klicka på röd knapp.

    IntelliJ IDEA local console result.

Spark Livy Interactive Session Console (Scala)

  1. Från menyraden går du till Kör>Redigera konfigurationer....

  2. I fönstret Kör/felsöka konfigurationer går du till Apache Spark på HDInsight>[Spark på HDInsight] myApp i den vänstra rutan.

  3. Välj fliken i Remotely Run in Cluster huvudfönstret.

  4. Ange följande värden och välj sedan OK:

    Property Värde
    Spark-kluster (endast Linux) Välj det HDInsight Spark-kluster som du vill köra programmet på.
    Huvudklassnamn Standardvärdet är huvudklassen från den valda filen. Du kan ändra klassen genom att välja ellipsen(...) och välja en annan klass.

    Interactive Console Set Configuration.

  5. Från Project går du till myApp>src>main>scala>myApp.

  6. Från menyraden går du till Verktyg>Spark-konsolen>Kör Spark Livy Interactive Session Console(Scala).

  7. Konsolen bör se ut ungefär som bilden nedan. I konsolfönstret skriver du sc.appNameoch trycker sedan på ctrl+Retur. Resultatet visas. Du kan avsluta den lokala konsolen genom att klicka på röd knapp.

    IntelliJ IDEA Interactive Console Result.

Skicka markeringen till Spark-konsolen

Det är praktiskt att förutse skriptresultatet genom att skicka kod till den lokala konsolen eller Livy Interactive Session Console (Scala). Du kan markera lite kod i Scala-filen och sedan högerklicka på Skicka markering till Spark-konsolen. Den valda koden skickas till konsolen. Resultatet visas efter koden i konsolen. Konsolen kontrollerar om det finns några fel.

Send Selection to Spark Console.

Integrera med HDInsight Identity Broker (HIB)

Anslut till ditt HDInsight ESP-kluster med ID Broker (HIB)

Du kan följa de vanliga stegen för att logga in på Azure-prenumerationen för att ansluta till ditt HDInsight ESP-kluster med ID Broker (HIB). Efter inloggningen visas klusterlistan i Azure Explorer. Mer information finns i Anslut till ditt HDInsight-kluster.

Kör ett Spark Scala-program i ett HDInsight ESP-kluster med ID Broker (HIB)

Du kan följa de normala stegen för att skicka jobbet till HDInsight ESP-kluster med ID Broker (HIB). Mer information finns i Kör ett Spark Scala-program i ett HDInsight Spark-kluster.

Vi laddar upp nödvändiga filer till en mapp med namnet med ditt inloggningskonto, och du kan se uppladdningssökvägen i konfigurationsfilen.

upload path in the configuration.

Spark-konsolen på ett HDInsight ESP-kluster med ID Broker (HIB)

Du kan köra Spark Local Console (Scala) eller köra Spark Livy Interactive Session Console (Scala) på ett HDInsight ESP-kluster med ID Broker (HIB). Mer information finns i Spark-konsolen.

Rollen endast läsare

När användare skickar jobb till ett kluster med behörighet som endast läsare krävs Ambari-autentiseringsuppgifter.

  1. Logga in med rollkontot endast för läsare.

  2. Från Azure Explorer expanderar du HDInsight för att visa HDInsight-kluster som finns i din prenumeration. Klustren som är märkta "Role:Reader" har endast behörighet som endast läsare.

    `IntelliJ Azure Explorer Role:Reader`.

  3. Högerklicka på klustret med behörighet som endast läsare. Välj Länka det här klustret från snabbmenyn för att länka kluster. Ange användarnamnet och lösenordet för Ambari.

    IntelliJ Azure Explorer link this cluster.

  4. Om klustret har länkats uppdateras HDInsight. Klustrets fas länkas.

    IntelliJ Azure Explorer linked dialog.

  1. Klicka på Noden Jobb . Fönstret Nekad åtkomst till klusterjobb öppnas.

  2. Klicka på Länka det här klustret för att länka klustret.

    cluster job access denied dialog.

  1. Skapa en HDInsight-konfiguration. Välj sedan Fjärrkör i kluster.

  2. Välj ett kluster som har rollbehörighet endast för läsare för Spark-kluster (endast Linux). Varningsmeddelandet visas. Du kan klicka på Länka det här klustret för att länka klustret.

    IntelliJ IDEA run/debug configuration create.

Visa lagringskonton

  • För kluster med behörighet som endast läsare klickar du på noden Lagringskonton , fönstret Nekad lagringsåtkomst visas. Du kan klicka på Öppna Azure Storage Explorer för att öppna Storage Explorer.

    `IntelliJ IDEA Storage Access Denied`.

    IntelliJ IDEA Storage Access Denied button.

  • För länkade kluster klickar du på noden Lagringskonton , fönstret Nekad lagringsåtkomst visas. Du kan klicka på Öppna Azure Storage för att öppna Storage Explorer.

    `IntelliJ IDEA Storage Access Denied2`.

    IntelliJ IDEA Storage Access Denied2 button.

Konvertera befintliga IntelliJ IDEA-program till att använda Azure Toolkit for IntelliJ

Du kan konvertera befintliga Spark Scala-program som du skapade i IntelliJ IDEA till att vara kompatibla med Azure Toolkit for IntelliJ. Du kan sedan använda plugin-programmet för att skicka programmen till ett HDInsight Spark-kluster.

  1. Öppna den associerade .iml filen för ett befintligt Spark Scala-program som skapades via IntelliJ IDEA.

  2. På rotnivå är ett modulelement som följande text:

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

    Redigera elementet som ska läggas till UniqueKey="HDInsightTool" så att modulelementet ser ut som följande text:

    <module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4" UniqueKey="HDInsightTool">
    
  3. Spara ändringarna. Ditt program bör nu vara kompatibelt med Azure Toolkit for IntelliJ. Du kan testa det genom att högerklicka på projektnamnet i Project. Popup-menyn har nu alternativet Skicka Spark-program till HDInsight.

Rensa resurser

Om du inte kommer att fortsätta att använda det här programmet tar du bort klustret som du skapade med följande steg:

  1. Logga in på Azure-portalen.

  2. I rutan Sök längst upp skriver du HDInsight.

  3. Välj HDInsight-kluster under Tjänster.

  4. I listan över HDInsight-kluster som visas väljer du ... bredvid klustret som du skapade för den här artikeln.

  5. Välj Ta bort. Välj Ja.

Azure portal deletes HDInsight cluster.

Fel och lösning

Avmarkera src-mappen som Källor om du får fel om att det inte gick att skapa enligt nedan:

Screenshot showing the build failed.

Avmarkera src-mappen som Källor för att lösa problemet:

  1. Gå till Arkiv och välj Projektstruktur.

  2. Välj modulerna under Project Inställningar.

  3. Välj src-filen och avmarkera som Källor.

  4. Klicka på knappen Använd och klicka sedan på OK för att stänga dialogrutan.

    Screenshot showing the unmark the src as sources.

Nästa steg

I den här artikeln har du lärt dig hur du använder Plugin-programmet Azure Toolkit for IntelliJ för att utveckla Apache Spark-program skrivna i Scala. Sedan skickade de dem till ett HDInsight Spark-kluster direkt från IntelliJ:s integrerade utvecklingsmiljö (IDE). Gå vidare till nästa artikel för att se hur de data som du har registrerat i Apache Spark kan hämtas till ett BI-analysverktyg såsom Power BI.