Erstellen von Apache Spark-Anwendungen für HDInsight-Cluster mit dem Azure-Toolkit für Eclipse

Verwenden Sie die HDInsight-Tools im Azure-Toolkit für Eclipse, um in Scala geschriebene Apache Spark-Anwendungen zu entwickeln und diese direkt aus der Eclipse-IDE an einen Azure HDInsight Spark-Cluster zu senden. Sie können das HDInsight-Tools-Plug-In auf verschiedene Weise verwenden:

  • Zum Entwickeln und Übermitteln einer Scala Spark-Anwendung an einen HDInsight Spark-Cluster
  • Zum Zugreifen auf Ihre Azure HDInsight Spark-Clusterressourcen
  • Zum Entwickeln und lokalen Ausführen einer Scala Spark-Anwendung

Voraussetzungen

Installieren der erforderlichen Plug-Ins

Installieren des Azure-Toolkits für Eclipse

Installationsanweisungen finden Sie unter Installieren des Azure-Toolkits für Eclipse.

Installieren des Scala-Plug-Ins

Wenn Sie Eclipse öffnen, erkennen die HDInsight Tools automatisch, ob das Scala-Plug-In installiert ist. Klicken Sie auf OK um fortzufahren, und folgen Sie dann den Anweisungen zum Installieren des Plug-Ins vom Eclipse-Marketplace. Führen Sie nach dem Abschluss der Installation einen Neustart des Computers durch.

Automatic installation of the Scala plug-in.

Plug-Ins bestätigen

  1. Navigieren Sie zu Hilfe>Eclipse Marketplace... .

  2. Wählen Sie die Registerkarte Installiert aus.

  3. Es sollte mindestens Folgendes angezeigt werden:

    • Azure-Toolkit für Eclipse<-Version>.
    • Scala-IDE<-Version>.

Melden Sie sich bei Ihrem Azure-Abonnement an.

  1. Starten Sie die Eclipse-IDE.

  2. Navigieren Sie zu Fenster>Ansicht anzeigen>Sonstige...>Anmelden.. .

  3. Navigieren Sie im Dialogfeld Ansicht anzeigen zu Azure>Azure Explorer, und wählen Sie dann Öffnen aus.

    Apache Spark Eclipse show view.

  4. Klicken Sie im Azure Explorer mit der rechten Maustaste auf den Knoten Azure, und wählen Sie dann Anmelden aus.

  5. Wählen Sie im Dialogfeld Azure-Anmeldung die Authentifizierungsmethode aus, klicken Sie auf Anmelden, und schließen Sie den Anmeldevorgang ab.

    Apache Spark Eclipse Azure Sign.

  6. Nachdem Sie sich angemeldet haben, werden im Dialogfeld Ihre Abonnements alle Azure-Abonnements aufgelistet, die den Anmeldeinformationen zugeordnet sind. Wählen Sie im Dialogfeld Auswählen aus, um es zu schließen.

    Select Subscriptions dialog box.

  7. Navigieren Sie im Azure Explorer zu Azure>HDInsight, um die HDInsight Spark-Cluster in Ihrem Abonnement anzuzeigen.

    HDInsight Spark clusters in Azure Explorer3.

  8. Sie können einen Clusternamenknoten noch einmal erweitern, um die dem Cluster zugeordneten Ressourcen (z.B. Speicherkonten) anzuzeigen.

    Expanding a cluster name to see resources.

Sie können einen normalen Cluster mithilfe des verwalteten Ambari-Benutzernamens verknüpfen. In ähnlicher Weise können Sie einen in eine Domäne eingebundenen HDInsight-Cluster unter Verwendung von Domäne und Benutzername verknüpfen, wie etwa user1@contoso.com.

  1. Klicken Sie im Azure Explorer mit der rechten Maustaste auf HDInsight, und wählen Sie Cluster verknüpfen aus.

    Azure Explorer link cluster menu.

  2. Geben Sie Clustername, Benutzername und Kennwort ein, und wählen Sie dann OK aus. Geben Sie optional das Speicherkonto und den Speicherschlüssel ein, und wählen Sie anschließend den Speichercontainer aus, damit der Speicher-Explorer in der linken Strukturansicht funktioniert.

    Link New HDInsight cluster dialog.

    Hinweis

    Wir verwenden den verknüpften Speicherschlüssel, den Benutzernamen und das Kennwort, wenn der Cluster im Azure-Abonnement angemeldet ist und einen Cluster verknüpft hat. Azure Explorer storage accounts.

    Wenn Speicherschlüssel den aktuellen Fokus besitzt, müssen Benutzer, die nur die Tastatur verwenden, STRG+TAB verwenden, um den Fokus in das nächste Feld im Dialogfeld zu verschieben.

  3. Der verknüpfte Cluster wird unter HDInsight angezeigt. Jetzt können Sie eine Anwendung an diesen verknüpften Cluster übermitteln.

    Azure Explorer hdi linked cluster.

  4. Sie können die Verknüpfung eines Clusters im Azure-Explorer auch aufheben.

    Azure Explorer unlinked cluster.

Einrichten eines Spark Scala-Projekts für einen HDInsight Spark-Cluster

  1. Wählen Sie im Arbeitsbereich der Eclipse-IDE Datei>Neu>Projekt... aus.

  2. Wählen Sie im Assistenten Neues ProjektHDInsight-Projekt>Spark auf HDInsight (Scala) aus. Wählen Sie Weiteraus.

    Selecting the Spark on HDInsight (Scala) project.

  3. Geben Sie im Dialogfeld New HDInsight Scala Project (Neues HDInsight Scala-Projekt) die folgenden Werte an, und klicken Sie dann auf Next (Weiter):

    • Geben Sie einen Namen für das Projekt ein.
    • Achten Sie darauf, dass im Bereich JRE für Ausführungsumgebungs-JRE verwenden die Option JavaSE-1.7 oder höher festgelegt ist.
    • Im Bereich Spark-Bibliothek können Sie die Option Spark-SDK mit Maven konfigurieren auswählen. Unser Tool integriert die richtige Version für das Spark-SDK und das Scala-SDK. Sie können auch die Option Spark-SDK manuell hinzufügen auswählen, um das Spark-SDK manuell herunterzuladen und hinzuzufügen.

    New HDInsight Scala Project dialog box.

  4. Überprüfen Sie im nächsten Dialogfeld die Details, und wählen Sie dann Fertigstellen aus.

Erstellen einer Scala-Anwendung für einen HDInsight Spark-Cluster

  1. Erweitern Sie im Paket-Explorer das zuvor erstellte Projekt. Klicken Sie mit der rechten Maustaste auf src, und wählen Sie Neu>Sonstiges... aus.

  2. Wählen Sie im Dialogfeld Auswählen eines AssistentenScala-Assistenten>Scala-Objekt aus. Wählen Sie Weiteraus.

    Select a wizard Create a Scala Object.

  3. Geben Sie im Dialogfeld Create New File (Neue Datei erstellen) einen Namen für das Objekt ein, und klicken Sie dann auf Finish (Fertig stellen). Ein Text-Editor wird geöffnet.

    New File Wizard Create New File.

  4. Ersetzen Sie den aktuellen Inhalt im Text-Editor durch den Code unten:

    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("wasbs:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv")
    
        //find the rows that have only one digit in the seventh column in the CSV
        val rdd1 =  rdd.filter(s => s.split(",")(6).length() == 1)
    
        rdd1.saveAsTextFile("wasbs:///HVACOut")
        }
    }
    
  5. Führen Sie die Anwendung in einem HDInsight Spark-Cluster aus:

    a. Klicken Sie im Paket-Explorer mit der rechten Maustaste auf den Projektnamen, und wählen Sie dann Submit Spark Application to HDInsight (Spark-Anwendung an HDInsight senden) aus.

    b. Geben Sie im Dialogfeld Spark Submission (Spark-Übermittlung) die folgenden Werte ein, und wählen Sie dann Submit (Übermitteln) aus:

    • Wählen Sie für Cluster Nameden HDInsight Spark-Cluster aus, auf dem Sie Ihre Anwendung ausführen möchten.

    • Wählen Sie ein Artefakt aus dem Eclipse-Projekt oder von der Festplatte aus. Der Standardwert hängt von dem Element ab, auf das Sie im Paket-Explorer mit der rechten Maustaste klicken.

    • In der Dropdownliste Main class name (Hauptklassenname) zeigt der Übermittlungs-Assistent alle Objektnamen aus Ihrem Projekt an. Wählen Sie ein Objekt aus, oder geben Sie den Namen des Objekts ein, das Sie ausführen möchten. Wenn Sie ein Artefakt von einer Festplatte ausgewählt haben, müssen Sie den Namen der Hauptklasse manuell eingeben.

    • Da der Anwendungscode in diesem Beispiel keine Befehlszeilenargumente oder Referenzdateien (z. B. JAR) erfordert, können Sie die restlichen Textfelder leer lassen.

      Apache Spark Submission dialog box.

  6. Auf der Registerkarte Spark Submission sollte nun der Fortschritt angezeigt werden. Sie können die Anwendung anhalten, indem Sie im Fenster Spark Submission (Spark-Übermittlung) auf die rote Schaltfläche klicken. Sie können auch die Protokolle für die Anwendungsausführung anzeigen, indem Sie auf das Globussymbol klicken (in der Abbildung gekennzeichnet durch das blaue Feld).

    Apache Spark Submission window.

Zugreifen auf und Verwalten von HDInsight Spark-Clustern mithilfe der HDInsight-Tools im Azure-Toolkit für Eclipse

Sie können mithilfe der HDInsight-Tools verschiedene Vorgänge durchführen, z.B. auf die Auftragsausgabe zugreifen.

Zugreifen auf die Auftragsansicht

  1. Erweitern Sie im Azure Explorer die Option HDInsight, den Namen des Spark-Clusters, und wählen Sie dann Aufträge aus.

    Azure Explorer Eclipse job view node.

  2. Wählen Sie den Knoten Jobs (Aufträge) aus. Wenn die Java-Version niedriger als 1.8 ist, erinnern Sie HDInsight Tools automatisch daran, das E(fx)clipse-Plug-In zu installieren. Klicken Sie auf OK, um fortzufahren, befolgen Sie dann die Anweisungen des Assistenten zum Installieren über den Eclipse Marketplace, und starten Sie Eclipse neu.

    Install missing plugin E(fx)clipse.

  3. Öffnen Sie in der Auftragsansicht den Knoten Jobs (Aufträge). Im rechten Bereich werden auf der Registerkarte Spark Job View (Spark-Auftragsansicht) alle Anwendungen angezeigt, die in dem Cluster ausgeführt wurden. Wählen Sie den Namen der Anwendung aus, zu der Sie weitere Details anzeigen möchten.

    Apache Eclipse view job logs details.

    Sie können dann eine der folgenden Aktionen ausführen:

    • Zeigen Sie auf den Auftragsgraphen. Dadurch werden grundlegende Informationen zum ausgeführten Auftrag angezeigt. Wenn Sie den Auftragsgraphen auswählen, werden die Phasen und die von den einzelnen Aufträgen generierten Informationen angezeigt.

      Apache Spark job graph stage info.

    • Klicken Sie auf die Registerkarte Log (Protokoll), um häufig verwendete Protokolle anzuzeigen, z. B. Driver Stderr, Driver Stdout und Directory Info.

      Apache Spark Eclipse job log info.

    • Öffnen Sie die Spark-Verlaufsbenutzeroberfläche und die Apache Hadoop YARN-Benutzeroberfläche (auf Anwendungsebene), indem Sie auf die Links im oberen Bereich des Fensters klicken.

Zugreifen auf den Speichercontainer des Clusters

  1. Erweitern Sie im Azure Explorer den Stammknoten HDInsight, um eine Liste der verfügbaren HDInsight Spark-Cluster anzuzeigen.

  2. Erweitern Sie den Namen des Clusters, um das Speicherkonto und den Standardspeichercontainer des Clusters anzuzeigen.

    Storage account and default storage container.

  3. Wählen Sie den Namen des Speichercontainers aus, der dem Cluster zugeordnet ist. Doppelklicken Sie im rechten Bereich auf den Ordner HVACOut. Öffnen Sie eine der part-Dateien, um die Ausgabe der Anwendung anzuzeigen.

Zugreifen auf den Spark-Verlaufsserver

  1. Klicken Sie im Azure Explorer mit der rechten Maustaste auf den Namen Ihres Spark-Clusters, und wählen Sie dann Open Spark History UI (Spark-Verlaufsbenutzeroberfläche öffnen) aus. Geben Sie die Anmeldeinformationen für den Cluster ein, wenn Sie dazu aufgefordert werden. Diese Anmeldeinformationen haben Sie bei der Bereitstellung des Clusters angegeben.

  2. Im Dashboard des Spark-Verlaufsservers können Sie die Anwendung, deren Ausführung Sie gerade beendet haben, anhand des Anwendungsnamens suchen. Im obigen Code legen Sie den Namen der Anwendung mit val conf = new SparkConf().setAppName("MyClusterApp") fest. Daher lautete der Name Ihrer Spark-Anwendung MyClusterApp.

Starten des Apache Ambari-Portals

  1. Klicken Sie im Azure Explorer mit der rechten Maustaste auf den Namen Ihres Spark-Clusters, und wählen Sie dann Open Cluster Management Portal (Ambari) (Clusterverwaltungsportal [Ambari] öffnen) aus.

  2. Geben Sie die Anmeldeinformationen für den Cluster ein, wenn Sie dazu aufgefordert werden. Diese Anmeldeinformationen haben Sie bei der Bereitstellung des Clusters angegeben.

Verwalten von Azure-Abonnements

Standardmäßig führen HDInsight Tools im Azure-Toolkit für Eclipse die Spark-Cluster in all Ihren Azure-Abonnements auf. Bei Bedarf können Sie die Abonnements angeben, für die Sie auf den Cluster zugreifen möchten.

  1. Klicken Sie im Azure Explorer mit der rechten Maustaste auf den Hauptknoten Azure, und wählen Sie dann Abonnements verwalten aus.

  2. Deaktivieren Sie im Dialogfeld die Kontrollkästchen für die Abonnements, auf die Sie nicht zugreifen möchten, und klicken Sie dann auf Close (Schließen). Sie können auch Abmelden auswählen, wenn Sie sich von Ihrem Azure-Abonnement abmelden möchten.

Lokales Ausführen einer Spark Scala-Anwendung

Mithilfe der HDInsight-Tools-im Azure-Toolkit für Eclipse können Sie Spark Scala-Anwendungen lokal auf Ihrer Arbeitsstation ausführen. In der Regel müssen solche Anwendungen nicht auf Clusterressourcen wie den Speichercontainer zugreifen und können lokal ausgeführt und getestet werden.

Voraussetzung

Beim Ausführen der lokalen Spark Scala-Anwendung auf einem Windows-Computer wird unter Umständen eine Ausnahme wie unter SPARK-2356 beschrieben ausgelöst. Diese Ausnahme tritt auf, weil WinUtils.exe in Windows fehlt.

Um diesen Fehler zu beheben, müssen Sie Winutils.exe herunterladen und an einem Speicherort wie C:\WinUtils\bin ablegen. Fügen Sie dann die Umgebungsvariable HADOOP_HOME hinzu, und legen Sie den Wert der Variable auf C\WinUtils fest.

Ausführen einer lokalen Spark Scala-Anwendung

  1. Starten Sie Eclipse, und erstellen Sie ein Projekt. Nehmen Sie im Dialogfeld New Project (Neues Projekt) die folgenden Einstellungen vor, und klicken Sie anschließend auf Next (Weiter).

  2. Wählen Sie im Assistenten Neues ProjektHDInsight-Projekt>Spark auf HDInsight – Beispiel für lokale Ausführung (Scala) aus. Wählen Sie Weiteraus.

    New project selects a wizard dialog.

  3. Um die Projektdetails anzugeben, führen Sie die Schritte 3 bis 6 wie oben im Abschnitt Einrichten eines Spark Scala-Projekts für einen HDInsight Spark-Cluster gezeigt durch.

  4. Die Vorlage fügt einen Beispielcode (LogQuery) unter dem Ordner src hinzu, der lokal auf Ihrem Computer ausgeführt werden kann.

    Location of LogQuery local scala application.

  5. Klicken Sie mit der rechten Maustaste auf logquery.scala, und wählen Sie Ausführen als>1 Scala-Anwendung aus. Auf der Registerkarte Console (Konsole) wird eine Ausgabe der folgenden Art angezeigt:

    Spark application local run result.

Rolle nur mit Leseberechtigung

Wenn Benutzer, die über eine Rolle nur mit Leseberechtigung verfügen, einen Auftrag an einen Cluster übermitteln, sind Ambari-Anmeldeinformationen erforderlich.

  1. Melden Sie sich mit einem Konto an, das über eine Rolle nur mit Leseberechtigung verfügt.

  2. Erweitern Sie im Azure Explorer die Option HDInsight, um die HDInsight-Cluster anzuzeigen, die sich in Ihrem Abonnement befinden. Cluster mit der Kennzeichnung "Role: Reader" verfügen über eine Rolle nur mit Leseberechtigung.

    HDInsight Spark clusters in Azure Explorer role reader.

  3. Klicken Sie mit der rechten Maustaste auf den Cluster, der über eine Rolle nur mit Leseberechtigung verfügt. Wählen Sie aus dem Kontextmenü den Eintrag Link this cluster (Diesen Cluster verknüpfen) aus, um den Cluster zu verknüpfen. Geben Sie den Benutzernamen und das Kennwort für Ambari ein.

    HDInsight Spark clusters in Azure Explorer link.

  4. Wenn der Cluster erfolgreich verknüpft wurde, wird HDInsight aktualisiert. Der Status des Clusters ändert sich zu „Linked“ (Verknüpft).

    HDInsight Spark clusters in Azure Explorer linked.

  1. Klicken Sie auf den Knoten Jobs (Aufträge). Das Fenster Cluster Job Access Denied (Zugriff auf Clusterauftrag verweigert) wird angezeigt.

  2. Klicken Sie auf Link this cluster (Diesen Cluster verknüpfen), um den Cluster zu verknüpfen.

    HDInsight Spark clusters in Azure Explorer9.

  1. Erstellen Sie ein HDInsight-Projekt.

  2. Klicken Sie mit der rechten Maustaste auf das Paket. Wählen Sie dann Submit Spark Application to HDInsight (Spark-Anwendung an HDInsight senden) aus.

    HDInsight Spark clusters in Azure Explorer submit.

  3. Wählen Sie einen Cluster aus, der über eine Rolle nur mit Leseberechtigung für Clustername verfügt. Es wird eine Warnmeldung angezeigt. Sie können auf Link this cluster (Diesen Cluster verknüpfen) klicken, um den Cluster zu verknüpfen.

    HDInsight Spark clusters in Azure Explorer link this.

Anzeigen von Speicherkonten

  • Klicken Sie in einem Cluster, der über eine Rolle nur mit Leseberechtigung verfügt, auf den Knoten Storage Accounts (Speicherkonten). Das Fenster Storage Access Denied (Zugriff auf Speicher verweigert) wird angezeigt.

    HDInsight Spark clusters in Azure Explorer storage.

    HDInsight Spark clusters in Azure Explorer denied.

  • Klicken Sie in einem verknüpften Cluster auf den Knoten Storage Accounts (Speicherkonten). Das Fenster Storage Access Denied (Zugriff auf Speicher verweigert) wird angezeigt.

    HDInsight Spark clusters in Azure Explorer denied2.

Bekannte Probleme

Beim Verwenden von Cluster verknüpfen empfehle ich, die Anmeldeinformationen des Speichers anzugeben.

link cluster with storage credential eclipses.

Es gibt zwei Modi zum Übermitteln der Aufträge. Wenn Speicheranmeldeinformationen bereitgestellt werden, wird der Auftrag im Batchmodus übermittelt. Andernfalls wird der interaktive Modus verwendet. Wenn der Cluster ausgelastet ist, erhalten Sie möglicherweise die folgende Fehlermeldung.

eclipse get error when cluster busy.

eclipse get error when cluster busy yarn.

Weitere Informationen

Szenarien

Erstellen und Ausführen von Anwendungen

Tools und Erweiterungen

Verwalten von Ressourcen