Tutorial: Erstellen einer Scala Maven-Anwendung für Apache Spark in HDInsight mithilfe von IntelliJ

In diesem Tutorial erfahren Sie, wie Sie eine in Scala geschriebene Apache Spark-Anwendung erstellen, die Apache Maven mit IntelliJ IDEA nutzt. In diesem Artikel wird Apache Maven als Buildsystem verwendet. Darüber hinaus wird ein von IntelliJ IDEA bereitgestellter vorhandener Maven-Archetyp für Scala genutzt. Das Erstellen einer Scala-Anwendung in IntelliJ IDEA umfasst die folgenden Schritte:

  • Verwenden von Maven als Buildsystem
  • Aktualisieren der Projektobjektmodell-Datei (POM-Datei) zum Auflösen von Spark-Modulabhängigkeiten
  • Schreiben der Anwendung in Scala
  • Generieren einer JAR-Datei, die an HDInsight Spark-Cluster übermittelt werden kann
  • Ausführen der Anwendung in einem Spark-Cluster mithilfe von Livy

In diesem Tutorial lernen Sie Folgendes:

  • Installieren des Scala-Plug-Ins für IntelliJ IDEA
  • Verwenden von IntelliJ zum Entwickeln einer Scala Maven-Anwendung
  • Erstellen eines eigenständigen Scala-Projekts

Voraussetzungen

Installieren des Scala-Plug-Ins für IntelliJ IDEA

Führen Sie die folgenden Schritte aus, um das Scala-Plug-In zu installieren:

  1. Öffnen Sie IntelliJ IDEA.

  2. Navigieren Sie auf der Willkommensseite zu Konfigurieren>Plug-Ins, um das Fenster Plug-Ins zu öffnen.

    Screenshot showing IntelliJ Welcome Screen.

  3. Wählen Sie Install (Installieren) für Azure-Toolkit für IntelliJ aus.

    Screenshot showing IntelliJ Azure Tool Kit.

  4. Wählen Sie für das in dem neuen Fenster empfohlene Scala-Plug-In die Option Installieren aus.

    Screenshot showing IntelliJ Scala Plugin.

  5. Nach erfolgreicher Plug-In-Installation müssen Sie die IDE neu starten.

Erstellen der Anwendung mit IntelliJ

  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 (Scala) (Spark-Projekt (Scala)) aus.

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

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

    Screenshot showing create application.

  5. Wählen Sie Weiter aus.

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

    Eigenschaft BESCHREIBUNG
    Projektname Geben Sie einen Namen ein.
    Projektspeicherort Geben Sie den Speicherort für Ihr Projekt ein.
    Project SDK (Projekt-SDK) Dieses Feld ist bei der erstmaligen Verwendung von IDEA 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 IDEA Selecting the Spark SDK.

  7. Wählen Sie Fertig stellenaus.

Erstellen eines eigenständigen Scala-Projekts

  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 die Option Maven aus.

  3. Geben Sie ein Projekt-SDKan. Klicken Sie auf New... (Neu...), und navigieren Sie zum Installationsverzeichnis von Java.

  4. Aktivieren Sie das Kontrollkästchen Create from archetype (Archetypbasierte Erstellung).

  5. Wählen Sie in der Liste der Archetypen org.scala-tools.archetypes:scala-archetype-simple aus. Dieser Archetyp erstellt die passende Verzeichnisstruktur und lädt die erforderlichen Standardabhängigkeiten zum Schreiben des Scala-Programms herunter.

    Screenshot shows the selected archetype in the New Project window.

  6. Wählen Sie Weiter aus.

  7. Klappen Sie Artifact Coordinates (Artefaktkoordinaten) auf. Geben Sie passende Werte für GroupId und ArtifactId an. Name und Ort werden automatisch ausgefüllt. In diesem Tutorial werden die folgenden Werte verwendet:

    • GroupId: com.microsoft.spark.example
    • ArtifactId: SparkSimpleApp

    Screenshot shows the Artifact Coordinates option in the New Project window.

  8. Wählen Sie Weiter aus.

  9. Überprüfen Sie die Einstellungen, und wählen Sie Weiter aus.

  10. Überprüfen Sie den Projektnamen und einen Speicherort, und wählen Sie anschließend Fertig stellen aus. Das Importieren des Projekts dauert ein paar Minuten.

  11. Navigieren Sie nach Abschluss des Projektimports im linken Bereich zu SparkSimpleApp>src>test>scala>com>microsoft>spark>example. Klicken Sie mit der rechten Maustaste auf MySpec, und wählen Sie Delete... (Löschen...) aus. Sie brauchen diese Datei für die Anwendung nicht. Wählen Sie im Dialogfeld OK aus.

  12. In späteren Schritten wird die Datei pom.xml aktualisiert, um die Abhängigkeiten für die Spark Scala-Anwendung zu definieren. Damit diese Abhängigkeiten automatisch heruntergeladen und aufgelöst werden, muss Maven konfiguriert sein.

  13. Wählen Sie im Menü File (Datei) die Option Settings (Einstellungen) aus, um das Fenster Settings (Einstellungen) zu öffnen.

  14. Navigieren Sie im Fenster Settings (Einstellungen) zu Build, Execution, Deployment>Build Tools>Maven>Importing („Erstellung, Ausführung, Bereitstellung“ > „Buildtools“ > „Maven“ > „Importieren“).

  15. Aktivieren Sie das Kontrollkästchen Import Maven projects automatically (Maven-Projekte automatisch importieren).

  16. Klicken Sie auf Apply (Anwenden) und dann auf OK. Daraufhin wird wieder das Projektfenster angezeigt.

    :::image type="content" source="./media/apache-spark-create-standalone-application/configure-maven-download.png" alt-text="Configure Maven for automatic downloads." border="true":::
    
  17. Navigieren Sie im linken Bereich zu src>main>scala>com.microsoft.spark.example, und doppelklicken Sie dann auf App, um „App.scala“ zu öffnen.

  18. Ersetzen Sie den vorhandenen Beispielcode durch den folgenden Code, und speichern Sie die Änderungen. Dieser Code liest die Daten aus der Datei „HVAC.csv“ (verfügbar in allen HDInsight Spark-Clustern), ruft die Zeilen ab, die nur eine Ziffer in der sechsten Spalte enthalten, und schreibt die Ausgabe in /HVACOut unter dem Standardspeichercontainer für den Cluster.

    package com.microsoft.spark.example
    
    import org.apache.spark.SparkConf
    import org.apache.spark.SparkContext
    
    /**
      * Test IO to wasb
      */
    object WasbIOTest {
        def main (arg: Array[String]): Unit = {
            val conf = new SparkConf().setAppName("WASBIOTest")
            val sc = new SparkContext(conf)
    
            val rdd = sc.textFile("wasb:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv")
    
            //find the rows which have only one digit in the 7th column in the CSV
            val rdd1 = rdd.filter(s => s.split(",")(6).length() == 1)
    
            rdd1.saveAsTextFile("wasb:///HVACout")
        }
    }
    
  19. Doppelklicken Sie im linken Bereich auf pom.xml.

  20. Fügen Sie in <project>\<properties> folgende Segmente hinzu:

    <scala.version>2.11.8</scala.version>
    <scala.compat.version>2.11.8</scala.compat.version>
    <scala.binary.version>2.11</scala.binary.version>
    
  21. Fügen Sie in <project>\<dependencies> folgende Segmente hinzu:

    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_${scala.binary.version}</artifactId>
        <version>2.3.0</version>
    </dependency>
    
    Save changes to pom.xml.
    
  22. Erstellen Sie die JAR-Datei. IntelliJ IDEA ermöglicht die Erstellung von JAR als Projektartefakt. Führen Sie die folgenden Schritte aus:

    1. Wählen Sie im Menü File (Datei) die Option Project Structure... (Projektstruktur...) aus.

    2. Navigieren Sie im Fenster Project Structure (Projektstruktur) zu Artifacts>+>JAR>From modules with dependencies... („Artefakte“ > Plussymbol > „JAR“ > „Aus Modulen mit Abhängigkeiten...“).

      `IntelliJ IDEA project structure add jar`.

    3. Wählen Sie im Fenster Create JAR from Modules (JAR aus Modulen erstellen) das Ordnersymbol im Textfeld Main Class (Hauptklasse) aus.

    4. Wählen Sie im Fenster Select Main Class (Hauptklasse auswählen) die standardmäßig angezeigte Klasse und anschließend OK aus.

      `IntelliJ IDEA project structure select class`.

    5. Vergewissern Sie sich im Fenster Create JAR from Modules (JAR aus Modulen erstellen), dass die Option extract to the target JAR (Extrahieren in die JAR-Zieldatei) aktiviert ist, und wählen Sie anschließend OK aus. Mit dieser Einstellung wird eine einzelne JAR-Datei mit allen Abhängigkeiten erstellt.

      IntelliJ IDEA project structure jar from module.

    6. Die Registerkarte Output Layout führt alle JAR-Dateien des Maven-Projekts auf. Sie können die Dateien auswählen und löschen, zu denen die Scala-Anwendung keine direkte Abhängigkeit hat. Bei der hier erstellten Anwendung können Sie alle bis auf die letzte (SparkSimpleApp-Kompilierungsausgabe) entfernen. Wählen Sie die zu löschenden JAR-Dateien und anschließend das Minussymbol - aus.

      `IntelliJ IDEA project structure delete output`.

      Vergewissern Sie sich, dass das Kontrollkästchen Include in project build (In Projektbuild einbeziehen) aktiviert ist. Mit dieser Option wird sichergestellt, dass die JAR-Datei bei jeder Projekterstellung oder -aktualisierung erstellt wird. Wählen Sie Apply (Übernehmen) und anschließend OK aus.

    7. Navigieren Sie zum Erstellen der JAR-Datei zu Build>Build Artifacts>Build („Erstellen“ > „Artefakte erstellen“ > „Erstellen“). Das Projekt wird in ca. 30 Sekunden kompiliert. Die JAR-Ausgabe wird unter \out\artifacts erstellt.

      IntelliJ IDEA project artifact output.

Ausführen der Anwendung im Apache Spark-Cluster

Sie können die folgenden Ansätze nutzen, um die Anwendung im Cluster auszuführen:

Bereinigen von Ressourcen

Wenn Sie diese Anwendung nicht mehr benötigen, gehen Sie wie folgt vor, um den erstellten Cluster zu löschen:

  1. Melden Sie sich beim Azure-Portal an.

  2. Geben Sie oben im Suchfeld den Suchbegriff HDInsight ein.

  3. Wählen Sie unter Dienste die Option HDInsight-Cluster aus.

  4. Klicken Sie in der daraufhin angezeigten Liste mit den HDInsight-Clustern neben dem Cluster, den Sie für dieses Tutorial erstellt haben, auf die Auslassungspunkte ( ... ).

  5. Klicken Sie auf Löschen. Wählen Sie Ja aus.

Screenshot showing how to delete an HDInsight cluster via the Azure portal.

Nächster Schritt

In diesem Artikel haben Sie gelernt, wie eine Apache Spark Scala-Anwendung erstellt wird. Im nächsten Artikel erfahren Sie, wie Sie diese Anwendung in einem HDInsight Spark-Cluster mit Livy ausführen.