Verarbeiten von Ereignissen aus Azure Event Hubs mit Apache Storm in HDInsight (C#)Process events from Azure Event Hubs with Apache Storm on HDInsight (C#)

Erfahren Sie mehr über die Verwendung von Azure Event Hubs aus Apache Storm in HDInsight.Learn how to work with Azure Event Hubs from Apache Storm on HDInsight. In diesem Dokument wird eine C#-Storm-Topologie zum Lesen und Schreiben von Daten aus Event Hubs verwendet.This document uses a C# Storm topology to read and write data from Event Hubs

SCP.NETSCP.NET

In den Schritten in diesem Dokument wird SCP.NET verwendet, ein NuGet-Paket, das die Erstellung von C#-Topologien und -Komponenten zur Verwendung mit Storm in HDInsight vereinfacht.The steps in this document use SCP.NET, a NuGet package that makes it easy to create C# topologies and components for use with Storm on HDInsight.

Wichtig

Während Sie für die Schritte in diesem Dokument eine Windows-Entwicklungsumgebung mit Visual Studio benötigen, kann das kompilierte Projekt an einen Linux-basierten Cluster mit Storm auf HDInsight übermittelt werden.While the steps in this document rely on a Windows development environment with Visual Studio, the compiled project can be submitted to a Storm on HDInsight cluster that uses Linux. Nur Linux-basierte Cluster, die nach dem 28. Oktober 2016 erstellt wurden, unterstützen SCP.NET-Topologien.Only Linux-based clusters created after October 28, 2016, support SCP.NET topologies.

Die HDInsight-Versionen 3.4 und höher verwenden Mono, um C#-Topologien auszuführen.HDInsight 3.4 and greater use Mono to run C# topologies. Das in diesem Dokument verwendete Beispiel funktioniert mit HDInsight 3.6.The example used in this document works with HDInsight 3.6. Wenn Sie eigene .NET-Lösungen für HDInsight erstellen möchten, finden Sie im Dokument Mono-Kompatibilität Informationen zu möglichen Inkompatibilitäten.If you plan on creating your own .NET solutions for HDInsight, check the Mono compatibility document for potential incompatibilities.

ClusterversionsverwaltungCluster versioning

Das Microsoft.SCP.Net.SDK-NuGet-Paket, das Sie für Ihr Projekt verwenden, muss der Hauptversion von Storm entsprechen, die auf HDInsight installiert ist.The Microsoft.SCP.Net.SDK NuGet package you use for your project must match the major version of Storm installed on HDInsight. Die HDInsight-Versionen 3.5 und 3.6 verwenden Storm 1.x, daher müssen Sie mit diesen Clustern die SCP.NET-Version 1.0.x.x verwenden.HDInsight versions 3.5 and 3.6 use Storm 1.x, so you must use SCP.NET version 1.0.x.x with these clusters.

Wichtig

Im Beispiel in diesem Dokument wird ein HDInsight 3.5- oder 3.6-Cluster erwartet.The example in this document expects an HDInsight 3.5 or 3.6 cluster.

Linux ist das einzige Betriebssystem, das unter HDInsight Version 3.4 oder höher verwendet wird.Linux is the only operating system used on HDInsight version 3.4 or greater.

C#-Topologien müssen auch auf .NET 4.5 ausgerichtet sein.C# topologies must also target .NET 4.5.

Arbeiten mit Event HubsHow to work with Event Hubs

Microsoft stellt eine Reihe von Java-Komponenten bereit, die für die Kommunikation mit Event Hubs über eine Storm-Topologie verwendet werden können.Microsoft provides a set of Java components that can be used to communicate with Event Hubs from a Storm topology. Die Java-Archivdatei (JAR), die eine mit HDInsight 3.6 kompatible Version dieser Komponenten enthält, finden Sie unter https://github.com/hdinsight/mvn-repo/raw/master/org/apache/storm/storm-eventhubs/1.1.0.1/storm-eventhubs-1.1.0.1.jar.You can find the Java archive (JAR) file that contains an HDInsight 3.6 compatible version of these components at https://github.com/hdinsight/mvn-repo/raw/master/org/apache/storm/storm-eventhubs/1.1.0.1/storm-eventhubs-1.1.0.1.jar.

Wichtig

Die Komponenten sind zwar in Java geschrieben, Sie können sie jedoch problemlos in einer C#-Topologie verwenden.While the components are written in Java, you can easily use them from a C# topology.

In diesem Beispiel werden die folgenden Komponenten verwendet:The following components are used in this example:

  • EventHubSpout: Liest Daten aus Event Hubs.EventHubSpout: Reads data from Event Hubs.
  • EventHubBolt: Schreibt Daten in Event Hubs.EventHubBolt: Writes data to Event Hubs.
  • EventHubSpoutConfig: Wird zum Konfigurieren von EventHubSpout verwendet.EventHubSpoutConfig: Used to configure EventHubSpout.
  • EventHubBoltConfig: Wird zum Konfigurieren von EventHubBolt verwendet.EventHubBoltConfig: Used to configure EventHubBolt.

Beispiel für die Verwendung von SpoutsExample spout usage

SCP.NET stellt Methoden bereit, die zum Hinzufügen eines EventHubSpout zu Ihrer Topologie dienen.SCP.NET provides methods for adding an EventHubSpout to your topology. Mit diesen Methoden lassen sich Spouts einfach hinzufügen als mit den allgemeinen Methoden zum Hinzufügen einer Java-Komponente.These methods make it easier to add a spout than using the generic methods for adding a Java component. Das folgende Beispiel zeigt, wie Sie mit dem SetEventHubSpout und den von SCP.NET bereitgestellten EventHubSpoutConfig-Methoden einen Spout erstellen:The following example demonstrates how to create a spout by using the SetEventHubSpout and EventHubSpoutConfig methods provided by SCP.NET:

 topologyBuilder.SetEventHubSpout(
    "EventHubSpout",
    new EventHubSpoutConfig(
        ConfigurationManager.AppSettings["EventHubSharedAccessKeyName"],
        ConfigurationManager.AppSettings["EventHubSharedAccessKey"],
        ConfigurationManager.AppSettings["EventHubNamespace"],
        ConfigurationManager.AppSettings["EventHubEntityPath"],
        eventHubPartitions),
    eventHubPartitions);

Das obige Beispiel erstellt eine neue Spoutkomponente namens EventHubSpout und konfiguriert diese für die Kommunikation mit einem Event Hub.The previous example creates a new spout component named EventHubSpout, and configures it to communicate with an event hub. Der Parallelitätshinweis für die Komponente ist auf die Anzahl von Partitionen im Event Hub festgelegt.The parallelism hint for the component is set to the number of partitions in the event hub. Durch diese Einstellung kann Storm eine Instanz der Komponente für jede Partition erstellen.This setting allows Storm to create an instance of the component for each partition.

Beispiel für die Verwendung von BoltsExample bolt usage

Verwenden Sie die JavaComponentConstructor-Methode, um eine Instanz des Bolts zu erstellen.Use the JavaComponmentConstructor method to create an instance of the bolt. Das folgende Beispiel veranschaulicht, wie Sie eine neue Instanz von EventHubBolt erstellen und konfigurieren:The following example demonstrates how to create and configure a new instance of the EventHubBolt:

// Java construcvtor for the Event Hub Bolt
JavaComponentConstructor constructor = JavaComponentConstructor.CreateFromClojureExpr(
    String.Format(@"(org.apache.storm.eventhubs.bolt.EventHubBolt. (org.apache.storm.eventhubs.bolt.EventHubBoltConfig. " +
        @"""{0}"" ""{1}"" ""{2}"" ""{3}"" ""{4}"" {5}))",
        ConfigurationManager.AppSettings["EventHubPolicyName"],
        ConfigurationManager.AppSettings["EventHubPolicyKey"],
        ConfigurationManager.AppSettings["EventHubNamespace"],
        "servicebus.windows.net",
        ConfigurationManager.AppSettings["EventHubName"],
        "true"));

// Set the bolt to subscribe to data from the spout
topologyBuilder.SetJavaBolt(
    "eventhubbolt",
    constructor,
    partitionCount)
        .shuffleGrouping("Spout");

Hinweis

Dieses Beispiel verwendet einen als Zeichenfolge übergebenen Clojure-Ausdruck anstelle von JavaComponentConstructor, um eine EventHubBoltConfig-Komponente zu erstellen, wie es das Spout-Beispiel getan hat.This example uses a Clojure expression passed as a string, instead of using JavaComponentConstructor to create an EventHubBoltConfig, as the spout example did. Beide Methoden funktionieren.Either method works. Verwenden Sie die Methode, die für Sie am besten scheint.Use the method that feels best to you.

Herunterladen des abgeschlossenen ProjektsDownload the completed project

Sie können eine vollständige Version des in diesem Artikel erstellten Projekts von GitHub herunterladen.You can download a complete version of the project created in this article from GitHub. Sie müssen jedoch weiterhin Konfigurationseinstellungen bereitstellen, indem Sie die Schritte in diesem Artikel befolgen.However, you still need to provide configuration settings by following the steps in this article.

VoraussetzungenPrerequisites

  • Ein Apache Storm-Cluster in HDInsight.An Apache Storm cluster on HDInsight. Siehe Erstellen von Apache Hadoop-Clustern im Azure-Portal, und wählen Sie Storm für Clustertyp aus.See Create Apache Hadoop clusters using the Azure portal and select Storm for Cluster type.

    Warnung

    Das in diesem Dokument verwendete Beispiel erfordert Storm auf HDInsight Version 3.5 oder 3.6.The example used in this document requires Storm on HDInsight version 3.5 or 3.6. Diese Methode kann aufgrund von wichtigen Namensänderungen für die Klasse nicht mit älteren Versionen von HDInsight verwendet werden.This does not work with older versions of HDInsight, due to breaking class name changes. Eine Version dieses Beispiels, die mit älteren Cluster funktioniert, finden Sie bei GitHub.For a version of this example that works with older clusters, see GitHub.

  • Einen Azure Event Hub.An Azure event hub.

  • Das Azure .NET SDK.The Azure .NET SDK.

  • Die HDInsight-Tools für Visual Studio.The HDInsight tools for Visual Studio.

  • Java JDK 1.8 oder höher in Ihrer Entwicklungsumgebung.Java JDK 1.8 or later on your development environment. JDK-Downloads stehen bei Oracle zur Verfügung.JDK downloads are available from Oracle.

    • Die JAVA_HOME-Umgebungsvariable muss auf das Verzeichnis mit Java zeigen.The JAVA_HOME environment variable must point to the directory that contains Java.
    • Das %JAVA_HOME%/bin-Verzeichnis muss im Pfad liegen.The %JAVA_HOME%/bin directory must be in the path.

Herunterladen der Event Hub-KomponentenDownload the Event Hubs components

Herunterladen der Event Hubs-Spout- und -Bolt-Komponente von https://github.com/hdinsight/mvn-repo/raw/master/org/apache/storm/storm-eventhubs/1.1.0.1/storm-eventhubs-1.1.0.1.jar.Download the Event Hubs spout and bolt component from https://github.com/hdinsight/mvn-repo/raw/master/org/apache/storm/storm-eventhubs/1.1.0.1/storm-eventhubs-1.1.0.1.jar.

Erstellen Sie ein Verzeichnis mit dem Namen eventhubspout, und speichern Sie die Datei in dem Verzeichnis.Create a directory named eventhubspout, and save the file into the directory.

Konfigurieren von Event HubsConfigure Event Hubs

Event Hubs ist die Datenquelle für dieses Beispiel.Event Hubs is the data source for this example. Verwenden Sie die Informationen im Abschnitt „Erstellen eines Event Hubs“ in Erste Schritte mit Event Hubs.Use the information in the "Create an event hub" section of Get started with Event Hubs.

  1. Nachdem der Event Hub erstellt wurde, zeigen Sie die EventHub-Einstellungen im Azure-Portal an, und wählen Sie Freigegebene Zugriffsrichtlinien aus.After the event hub has been created, view the EventHub settings in the Azure portal, and select Shared access policies. Wählen Sie + Hinzufügen aus, um die folgenden Richtlinien hinzuzufügen:Select + Add to add the following policies:

    NAMEName BerechtigungenPermissions
    writerwriter SendSend
    readerreader LauschenListen

    Screenshot des Fensters „Freigegebene Zugriffsrichtlinien“

  2. Wählen Sie die Richtlinien reader und writer aus.Select the reader and writer policies. Kopieren und speichern Sie den Primärschlüsselwert für beide Richtlinien, da diese Werte später verwendet werden.Copy and save the primary key value for both policies, as these values are used later.

Konfigurieren von EventHubWriterConfigure the EventHubWriter

  1. Wenn Sie die neueste Version der HDInsight-Tools für Visual Studio noch nicht installiert haben, finden Sie Informationen dazu unter Erste Schritte mit den HDInsight-Tools für Visual Studio.If you have not already installed the latest version of the HDInsight tools for Visual Studio, see Get started using HDInsight tools for Visual Studio.

  2. Laden Sie die Projektmappe von eventhub-storm-hybrid herunter.Download the solution from eventhub-storm-hybrid.

  3. Öffnen Sie im Projekt EventHubWriter die Datei App.config.In the EventHubWriter project, open the App.config file. Verwenden Sie die Informationen aus dem Event Hub, den Sie zuvor konfiguriert haben, um den Wert für die folgenden Schlüssel anzugeben:Use the information from the event hub that you configured earlier to fill in the value for the following keys:

    SchlüsselKey WertValue
    EventHubPolicyNameEventHubPolicyName writer (Wenn Sie einen anderen Namen für die Richtlinie mit der Berechtigung Send verwendet haben, verwenden sie ihn stattdessen.)writer (If you used a different name for the policy with Send permission, use it instead.)
    EventHubPolicyKeyEventHubPolicyKey Der Schlüssel für die writer-Richtlinie.The key for the writer policy.
    EventHubNamespaceEventHubNamespace Der Namespace, der den Event Hub enthält.The namespace that contains your event hub.
    EventHubNameEventHubName Ihr Event Hub-Name.Your event hub name.
    EventHubPartitionCountEventHubPartitionCount Die Anzahl der Partitionen in Ihrem Event Hub.The number of partitions in your event hub.
  4. Speichern und schließen Sie die Datei App.config.Save and close the App.config file.

Konfigurieren von EventHubReaderConfigure the EventHubReader

  1. Öffnen Sie das Projekt EventHubReader.Open the EventHubReader project.

  2. Öffnen Sie die Datei App.config für EventHubReader.Open the App.config file for the EventHubReader. Verwenden Sie die Informationen aus dem Event Hub, den Sie zuvor konfiguriert haben, um den Wert für die folgenden Schlüssel anzugeben:Use the information from the event hub that you configured earlier to fill in the value for the following keys:

    SchlüsselKey WertValue
    EventHubPolicyNameEventHubPolicyName reader (Wenn Sie einen anderen Namen für die Richtlinie mit der Berechtigung Listen verwendet haben, verwenden sie ihn stattdessen.)reader (If you used a different name for the policy with listen permission, use it instead.)
    EventHubPolicyKeyEventHubPolicyKey Der Schlüssel für die reader-Richtlinie.The key for the reader policy.
    EventHubNamespaceEventHubNamespace Der Namespace, der den Event Hub enthält.The namespace that contains your event hub.
    EventHubNameEventHubName Ihr Event Hub-Name.Your event hub name.
    EventHubPartitionCountEventHubPartitionCount Die Anzahl der Partitionen in Ihrem Event Hub.The number of partitions in your event hub.
  3. Speichern und schließen Sie die Datei App.config.Save and close the App.config file.

Bereitstellen der TopologienDeploy the topologies

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt EventHubReader, und wählen Sie An Storm in HDInsight übermitteln aus.From Solution Explorer, right-click the EventHubReader project, and select Submit to Storm on HDInsight.

    Screenshot des Projektmappen-Explorers, wobei „An Storm in HDInsight übermitteln“ hervorgehoben ist

  2. Wählen Sie im Dialogfeld Topologie übermitteln Ihren Storm-Cluster aus.On the Submit Topology dialog box, select your Storm Cluster. Erweitern Sie Zusätzliche Konfigurationen, wählen Sie Java File Paths und dann ... aus, und wählen Sie das Verzeichnis aus, das die zuvor heruntergeladene JAR-Datei enthält.Expand Additional Configurations, select Java File Paths, select ..., and select the directory that contains the JAR file that you downloaded earlier. Klicken Sie abschließend auf Senden.Finally, click Submit.

    Screenshot des Dialogfelds „Topologie übermitteln“

  3. Sobald die Topologie übermittelt wurde, wird der Storm Topologies Viewer angezeigt.When the topology has been submitted, the Storm Topologies Viewer appears. Wählen Sie im linken Bereich die Topologie EventHubReader aus, um Informationen über diese Topologie anzuzeigen.To view information about the topology, select the EventHubReader topology in the left pane.

    Screenshot des Storm Topologies Viewers

  4. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt EventHubWriter, und wählen Sie An Storm in HDInsight übermitteln aus.From Solution Explorer, right-click the EventHubWriter project, and select Submit to Storm on HDInsight.

  5. Wählen Sie im Dialogfeld Topologie übermitteln Ihren Storm-Cluster aus.On the Submit Topology dialog box, select your Storm Cluster. Erweitern Sie Zusätzliche Konfigurationen, wählen Sie Java File Paths und dann ... aus, und wählen Sie das Verzeichnis aus, das die zuvor heruntergeladene JAR-Datei enthält.Expand Additional Configurations, select Java File Paths, select ..., and select the directory that contains the JAR file you downloaded earlier. Klicken Sie abschließend auf Senden.Finally, click Submit.

  6. Sobald die Topologie übermittelt wurde, aktualisieren Sie die Topologieliste im Storm Topologies Viewer , um sicherzustellen, dass beide Topologien auf dem Cluster ausgeführt werden.When the topology has been submitted, refresh the topology list in the Storm Topologies Viewer to verify that both topologies are running on the cluster.

  7. Wählen Sie im Storm Topologies Viewer die Topologie EventHubReader aus.In Storm Topologies Viewer, select the EventHubReader topology.

  8. Doppelklicken Sie auf die LogBolt-Komponente im Diagramm, um die Komponentenzusammenfassung für den Bolt zu öffnen.To open the component summary for the bolt, double-click the LogBolt component in the diagram.

  9. Wählen Sie im Abschnitt Ausführer einen der Links in der Spalte Port aus.In the Executors section, select one of the links in the Port column. Dadurch werden die von der Komponente protokollierten Informationen angezeigt.This displays information logged by the component. Die protokollierten Informationen ähneln dem folgenden Text:The logged information is similar to the following text:

     2017-03-02 14:51:29.255 m.s.p.TaskHost [INFO] Received C# STDOUT: 2017-03-02 14:51:29,255 [1] INFO  EventHubReader_LogBolt [(null)] - Received data: {"deviceValue":1830978598,"deviceId":"8566ccbc-034d-45db-883d-d8a31f34068e"}
     2017-03-02 14:51:29.283 m.s.p.TaskHost [INFO] Received C# STDOUT: 2017-03-02 14:51:29,283 [1] INFO  EventHubReader_LogBolt [(null)] - Received data: {"deviceValue":1756413275,"deviceId":"647a5eff-823d-482f-a8b4-b95b35ae570b"}
     2017-03-02 14:51:29.313 m.s.p.TaskHost [INFO] Received C# STDOUT: 2017-03-02 14:51:29,312 [1] INFO  EventHubReader_LogBolt [(null)] - Received data: {"deviceValue":1108478910,"deviceId":"206a68fa-8264-4d61-9100-bfdb68ee8f0a"}
    

Beenden der TopologienStop the topologies

Um die Topologien zu beenden, wählen Sie jede Topologie im Storm Topologies Viewer aus, und klicken Sie dann auf Beenden.To stop the topologies, select each topology in the Storm Topology Viewer, then click Kill.

Screenshot des Storm Topologies Viewers mit hervorgehobener Schaltfläche „Kill“

Löschen des ClustersDelete your cluster

Warnung

Die Abrechnung für die HDInsight-Cluster erfolgt anteilsmäßig auf Minutenbasis und ist unabhängig von der Verwendung.Billing for HDInsight clusters is prorated per minute, whether you use them or not. Daher sollten Sie Ihren Cluster nach der Verwendung unbedingt wieder löschen.Be sure to delete your cluster after you finish using it. Sehen Sie sich die Informationen zum Löschen eines HDInsight-Clusters an.See how to delete an HDInsight cluster.

Nächste SchritteNext steps

In diesem Dokument haben Sie erfahren, wie Sie den Java-Spout und den -Bolt für Event Hubs aus einer C#-Topologie verwenden, um mit Daten in Azure Event Hub zu arbeiten.In this document, you have learned how to use the Java Event Hubs spout and bolt from a C# topology to work with data in Azure Event Hubs. Weitere Informationen zum Erstellen von C#-Topologien finden Sie in folgenden Themen:To learn more about creating C# topologies, see the following: