Zpracování událostí z Azure Event Hubs s využitím Apache Storm veC#službě HDInsight ()Process events from Azure Event Hubs with Apache Storm on HDInsight (C#)

Naučte se pracovat s Azure Event Hubs z Apache Storm v HDInsight.Learn how to work with Azure Event Hubs from Apache Storm on HDInsight. Tento dokument používá C# topologii pro čtení a zápis dat z Event HubsThis document uses a C# Storm topology to read and write data from Event Hubs

Poznámka

Verzi tohoto projektu v jazyce Java najdete v tématu zpracování událostí z Azure Event Hubs s Apache Storm v HDInsight (Java).For a Java version of this project, see Process events from Azure Event Hubs with Apache Storm on HDInsight (Java).

SCP.NETSCP.NET

Kroky v tomto dokumentu používají SCP.NET, balíček NuGet, který usnadňuje vytváření C# topologií a komponent pro použití s využitím více než v HDInsight.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.

Důležité

I když postup v tomto dokumentu spoléhá na vývojové prostředí systému Windows se sadou Visual Studio, zkompilovaný projekt lze odeslat do systému v clusteru HDInsight, který používá systém Linux.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. Pouze clustery se systémem Linux vytvořené po 28. říjnu 2016 podporují topologie SCP.NET.Only Linux-based clusters created after October 28, 2016, support SCP.NET topologies.

HDInsight 3,4 a vyšší použití mono ke spuštění C# topologií.HDInsight 3.4 and greater use Mono to run C# topologies. Příklad použitý v tomto dokumentu funguje se službou HDInsight 3,6.The example used in this document works with HDInsight 3.6. Pokud máte v úmyslu vytvořit vlastní řešení .NET pro HDInsight, podívejte se na dokument kompatibility mono , abyste mohli nekompatibilní problémy.If you plan on creating your own .NET solutions for HDInsight, check the Mono compatibility document for potential incompatibilities.

Správa verzí clusteruCluster versioning

Balíček NuGet Microsoft. SCP. NET. SDK, který použijete pro váš projekt, musí odpovídat hlavní verzi systému, která je nainstalovaná v HDInsight.The Microsoft.SCP.Net.SDK NuGet package you use for your project must match the major version of Storm installed on HDInsight. Verze HDInsight 3,5 a 3,6 používají přeplavi 1. x, takže musíte použít SCP.NET verze 1.0. x. x s těmito clustery.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.

Důležité

Příklad v tomto dokumentu očekává cluster HDInsight 3,5 nebo 3,6.The example in this document expects an HDInsight 3.5 or 3.6 cluster.

HDInsight od verze 3.4 výše používá výhradně operační systém Linux.Linux is the only operating system used on HDInsight version 3.4 or greater.

C#topologie musí také cílit na rozhraní .NET 4,5.C# topologies must also target .NET 4.5.

Jak pracovat s Event HubsHow to work with Event Hubs

Společnost Microsoft poskytuje sadu komponent Java, které lze použít ke komunikaci s Event Hubs z topologie s více podmnožinami.Microsoft provides a set of Java components that can be used to communicate with Event Hubs from a Storm topology. Soubor archivu Java (JAR), který obsahuje verzi kompatibilní s HDInsight 3,6, najdete na adrese 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.

Důležité

I když jsou komponenty napsané v jazyce Java, můžete je snadno použít z C# topologie.While the components are written in Java, you can easily use them from a C# topology.

V tomto příkladu se používají následující komponenty:The following components are used in this example:

  • EventHubSpout: čte data z Event Hubs.EventHubSpout: Reads data from Event Hubs.
  • EventHubBolt: zapisuje data do Event Hubs.EventHubBolt: Writes data to Event Hubs.
  • EventHubSpoutConfig: používá se ke konfiguraci EventHubSpout.EventHubSpoutConfig: Used to configure EventHubSpout.
  • EventHubBoltConfig: používá se ke konfiguraci EventHubBolt.EventHubBoltConfig: Used to configure EventHubBolt.

Příklad použití SpoutExample spout usage

SCP.NET poskytuje metody pro přidání EventHubSpout do topologie.SCP.NET provides methods for adding an EventHubSpout to your topology. Tyto metody usnadňují přidání Spout než použití obecných metod pro přidání komponenty Java.These methods make it easier to add a spout than using the generic methods for adding a Java component. Následující příklad ukazuje, jak vytvořit Spout pomocí metod SetEventHubSpout a EventHubSpoutConfig poskytovaných SCP.NET: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);

Předchozí příklad vytvoří novou komponentu Spout s názvem __EventHubSpout__a nakonfiguruje ji ke komunikaci s centrem událostí.The previous example creates a new spout component named EventHubSpout, and configures it to communicate with an event hub. Pomocný parametr paralelismus pro komponentu je nastaven na počet oddílů v centru událostí.The parallelism hint for the component is set to the number of partitions in the event hub. Toto nastavení umožňuje vytvořit instanci součásti pro každý oddíl.This setting allows Storm to create an instance of the component for each partition.

Příklad použití šroubuExample bolt usage

K vytvoření instance šroubu použijte metodu JavaComponmentConstructor .Use the JavaComponmentConstructor method to create an instance of the bolt. Následující příklad ukazuje, jak vytvořit a nakonfigurovat novou instanci rozhraní EventHubBolt: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");

Poznámka

Tento příklad používá výraz Clojure předaný jako řetězec namísto použití JavaComponentConstructor k vytvoření EventHubBoltConfig, jako by byl použit jako příklad Spout.This example uses a Clojure expression passed as a string, instead of using JavaComponentConstructor to create an EventHubBoltConfig, as the spout example did. Kterákoli z metod funguje.Either method works. Použijte metodu, která je pro vás nejvhodnější.Use the method that feels best to you.

Stáhnout dokončený projektDownload the completed project

Kompletní verzi projektu vytvořeného v tomto článku si můžete stáhnout z GitHubu.You can download a complete version of the project created in this article from GitHub. Přesto ale budete muset zadat nastavení konfigurace podle kroků v tomto článku.However, you still need to provide configuration settings by following the steps in this article.

PředpokladyPrerequisites

  • Cluster Apache Storm v HDInsight.An Apache Storm cluster on HDInsight. Přečtěte si téma vytvoření Apache Hadoop clusterů pomocí Azure Portal a výběr funkce pro typ clusteru.See Create Apache Hadoop clusters using the Azure portal and select Storm for Cluster type.

    Varování

    Příklad použitý v tomto dokumentu vyžaduje více než ve službě HDInsight verze 3,5 nebo 3,6.The example used in this document requires Storm on HDInsight version 3.5 or 3.6. Nefunguje se staršími verzemi HDInsight, protože se změnily změny názvu třídy.This does not work with older versions of HDInsight, due to breaking class name changes. Verzi tohoto příkladu, která funguje se staršími clustery, najdete v tématu GitHub.For a version of this example that works with older clusters, see GitHub.

  • Centrum událostí Azure.An Azure event hub.

  • Sada Azure .NET SDK.The Azure .NET SDK.

  • Nástroje HDInsight pro Visual Studio.The HDInsight tools for Visual Studio.

  • Java JDK 1,8 nebo novější ve vašem vývojovém prostředí.Java JDK 1.8 or later on your development environment. Soubory ke stažení JDK jsou k dispozici od Oracle.JDK downloads are available from Oracle.

    • Proměnná prostředí JAVA_HOME musí odkazovat na adresář, který obsahuje Java.The JAVA_HOME environment variable must point to the directory that contains Java.
    • Adresář % JAVA_HOME%/bin musí být v cestě.The %JAVA_HOME%/bin directory must be in the path.

Stáhnout součásti Event HubsDownload the Event Hubs components

Z https://github.com/hdinsight/mvn-repo/raw/master/org/apache/storm/storm-eventhubs/1.1.0.1/storm-eventhubs-1.1.0.1.jarsi stáhněte komponentu Event Hubs Spout a šroub.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.

Vytvořte adresář s názvem eventhubspouta uložte soubor do adresáře.Create a directory named eventhubspout, and save the file into the directory.

Konfigurace Event HubsConfigure Event Hubs

Event Hubs je zdroj dat pro tento příklad.Event Hubs is the data source for this example. Použijte informace v části Vytvoření centra událostí tématu Začínáme s Event Hubs.Use the information in the "Create an event hub" section of Get started with Event Hubs.

  1. Po vytvoření centra událostí si prohlédněte nastavení EventHub v Azure Portal a vyberte zásady sdíleného přístupu.After the event hub has been created, view the EventHub settings in the Azure portal, and select Shared access policies. Vyberte + Přidat a přidejte následující zásady:Select + Add to add the following policies:

    Name (Název)Name OprávněníPermissions
    archivwriter OdeslatSend
    Modulureader NaslouchatListen

    Snímek obrazovky okna zásady přístupu ke sdílení

  2. Vyberte zásady čtecího zařízení a zapisovače .Select the reader and writer policies. Zkopírujte a uložte hodnotu primárního klíče pro obě zásady, protože se tyto hodnoty použijí později.Copy and save the primary key value for both policies, as these values are used later.

Konfigurace EventHubWriterConfigure the EventHubWriter

  1. Pokud jste ještě nenainstalovali nejnovější verzi nástrojů HDInsight pro Visual Studio, přečtěte si téma Začínáme používat nástroje HDInsight pro 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. Stáhněte řešení z centra pro zaplavení – hybridní.Download the solution from eventhub-storm-hybrid.

  3. V projektu EventHubWriter otevřete soubor App. config .In the EventHubWriter project, open the App.config file. Pomocí informací z centra událostí, které jste nakonfigurovali dříve, vyplníte hodnotu pro následující klíče:Use the information from the event hub that you configured earlier to fill in the value for the following keys:

    KlíčKey HodnotaValue
    EventHubPolicyNameEventHubPolicyName zapisovač (Pokud jste pro zásadu s oprávněním Odeslat použili jiný název, použijte ji místo toho.)writer (If you used a different name for the policy with Send permission, use it instead.)
    EventHubPolicyKeyEventHubPolicyKey Klíč pro zásady zapisovače.The key for the writer policy.
    EventHubNamespaceEventHubNamespace Obor názvů, který obsahuje centrum událostí.The namespace that contains your event hub.
    eventHubNameEventHubName Název vašeho centra událostí.Your event hub name.
    EventHubPartitionCountEventHubPartitionCount Počet oddílů v centru událostí.The number of partitions in your event hub.
  4. Uložte a zavřete soubor App. config .Save and close the App.config file.

Konfigurace EventHubReaderConfigure the EventHubReader

  1. Otevřete projekt EventHubReader .Open the EventHubReader project.

  2. Otevřete soubor App. config pro EventHubReader.Open the App.config file for the EventHubReader. Pomocí informací z centra událostí, které jste nakonfigurovali dříve, vyplníte hodnotu pro následující klíče:Use the information from the event hub that you configured earlier to fill in the value for the following keys:

    KlíčKey HodnotaValue
    EventHubPolicyNameEventHubPolicyName Čtenář (Pokud jste pro zásadu použili jiný název, použijte místo toho oprávnění k naslouchání .)reader (If you used a different name for the policy with listen permission, use it instead.)
    EventHubPolicyKeyEventHubPolicyKey Klíč pro zásady čtenářeThe key for the reader policy.
    EventHubNamespaceEventHubNamespace Obor názvů, který obsahuje centrum událostí.The namespace that contains your event hub.
    eventHubNameEventHubName Název vašeho centra událostí.Your event hub name.
    EventHubPartitionCountEventHubPartitionCount Počet oddílů v centru událostí.The number of partitions in your event hub.
  3. Uložte a zavřete soubor App. config .Save and close the App.config file.

Nasazení topologiíDeploy the topologies

  1. Z Průzkumník řešeníklikněte pravým tlačítkem myši na projekt EventHubReader a vyberte Odeslat prozaplavení v HDInsight.From Solution Explorer, right-click the EventHubReader project, and select Submit to Storm on HDInsight.

    Snímek obrazovky Průzkumník řešení se zvýrazněnou možností odeslat na HDInsight ve službě HDInsight

  2. V dialogovém okně Odeslat topologii vyberte svůj clusterpro zaplavení.On the Submit Topology dialog box, select your Storm Cluster. Rozbalte Další konfigurace, vyberte cesty k souborům Java, vyberte ... a vyberte adresář, který obsahuje soubor JAR, který jste předtím stáhli.Expand Additional Configurations, select Java File Paths, select ..., and select the directory that contains the JAR file that you downloaded earlier. Nakonec klikněte na Odeslat.Finally, click Submit.

    Snímek obrazovky dialogového okna pro odeslání topologie

  3. Po odeslání topologie se zobrazí prohlížeč topologie pro vyplavení.When the topology has been submitted, the Storm Topologies Viewer appears. Pokud chcete zobrazit informace o topologii, vyberte topologii EventHubReader v levém podokně.To view information about the topology, select the EventHubReader topology in the left pane.

    Snímek obrazovky s prohlížečem topologií s více podsystému

  4. Z Průzkumník řešeníklikněte pravým tlačítkem myši na projekt EventHubWriter a vyberte Odeslat prozaplavení v HDInsight.From Solution Explorer, right-click the EventHubWriter project, and select Submit to Storm on HDInsight.

  5. V dialogovém okně Odeslat topologii vyberte svůj clusterpro zaplavení.On the Submit Topology dialog box, select your Storm Cluster. Rozbalte Další konfigurace, vyberte cesty k souborům Java, vyberte ... a vyberte adresář, který obsahuje soubor JAR, který jste stáhli dříve.Expand Additional Configurations, select Java File Paths, select ..., and select the directory that contains the JAR file you downloaded earlier. Nakonec klikněte na Odeslat.Finally, click Submit.

  6. Po odeslání topologie aktualizujte seznam topologie v prohlížeči topologií se všemi topologiemi, abyste ověřili, že oba topologie jsou v clusteru spuštěné.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. V prohlížeči topologií se všemi topologiemivyberte topologii EventHubReader .In Storm Topologies Viewer, select the EventHubReader topology.

  8. Chcete-li otevřít souhrn komponenty pro šroub, dvakrát klikněte na součást LogBolt v diagramu.To open the component summary for the bolt, double-click the LogBolt component in the diagram.

  9. V části vykonavatelé vyberte jeden z odkazů ve sloupci port .In the Executors section, select one of the links in the Port column. Zobrazí se informace zaprotokolované součástí.This displays information logged by the component. Protokolované informace jsou podobné následujícímu textu: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"}
    

Zastavení topologiíStop the topologies

Chcete-li zastavit topologie, vyberte každou topologii v prohlížeči topologieneplní a klikněte na tlačítko ukončit.To stop the topologies, select each topology in the Storm Topology Viewer, then click Kill.

Snímek obrazovky s prohlížečem topologie s více podsystému, se zvýrazněným tlačítkem Kill

Odstranění clusteruDelete your cluster

Varování

Fakturace za clustery HDInsight se účtuje poměrnou rychlostí za minutu, ať už je používáte, nebo ne.Billing for HDInsight clusters is prorated per minute, whether you use them or not. Po dokončení používání clusteru nezapomeňte tento cluster odstranit.Be sure to delete your cluster after you finish using it. Viz Jak odstranit cluster HDInsight.See how to delete an HDInsight cluster.

Další krokyNext steps

V tomto dokumentu jste se naučili, jak používat Java Event Hubs Spout a šroub z C# topologie pro práci s daty v Azure Event Hubs.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. Další informace o vytváření C# topologií najdete v následujících tématech:To learn more about creating C# topologies, see the following: