Przetwarzaj zdarzenia z usługi Azure Event Hubs przy użyciu Apache StormC#w usłudze HDInsight ()Process events from Azure Event Hubs with Apache Storm on HDInsight (C#)

Dowiedz się, jak korzystać z usługi Azure Event Hubs Apache Storm w usłudze HDInsight.Learn how to work with Azure Event Hubs from Apache Storm on HDInsight. Ten dokument używa topologii C# burzy do odczytu i zapisu danych z Event HubsThis document uses a C# Storm topology to read and write data from Event Hubs

SCP.NETSCP.NET

W procedurach przedstawionych w tym dokumencie używany jest pakiet NuGet SCP.NET, który ułatwia tworzenie C# topologii i składników do użycia z burzą w usłudze 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.

Ważne

Chociaż kroki opisane w tym dokumencie polegają na środowisku projektowym systemu Windows z programem Visual Studio, skompilowany projekt można przesłać do burzy w klastrze usługi HDInsight korzystającym z systemu 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. SCP.NET topologie nie obsługują tylko klastrów opartych na systemie Linux utworzonych po 28 października 2016.Only Linux-based clusters created after October 28, 2016, support SCP.NET topologies.

Usługa HDInsight 3,4 i nowsze wykorzystują narzędzia C# mono do uruchamiania topologii.HDInsight 3.4 and greater use Mono to run C# topologies. Przykład użyty w tym dokumencie współdziała z usługą HDInsight 3,6.The example used in this document works with HDInsight 3.6. Jeśli planujesz tworzenie własnych rozwiązań .NET dla usługi HDInsight, Sprawdź dokument zgodności mono , aby uzyskać potencjalne niezgodności.If you plan on creating your own .NET solutions for HDInsight, check the Mono compatibility document for potential incompatibilities.

Przechowywanie wersji klastraCluster versioning

Pakiet NuGet Microsoft. SCP. NET. SDK używany dla projektu musi być zgodny z wersją główną burzy w usłudze HDInsight.The Microsoft.SCP.Net.SDK NuGet package you use for your project must match the major version of Storm installed on HDInsight. Usługi HDInsight w wersji 3,5 i 3,6 używają burzy 1. x, dlatego należy użyć SCP.NET w wersji 1.0. x. x z tymi klastrami.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.

Ważne

W przykładzie w tym dokumencie oczekiwany jest klaster HDInsight 3,5 lub 3,6.The example in this document expects an HDInsight 3.5 or 3.6 cluster.

Linux jest jedynym systemem operacyjnym używanym w połączeniu z usługą HDInsight w wersji 3.4 lub nowszą.Linux is the only operating system used on HDInsight version 3.4 or greater.

C#topologie muszą również kierować platformę .NET 4,5.C# topologies must also target .NET 4.5.

Jak korzystać z Event HubsHow to work with Event Hubs

Firma Microsoft udostępnia zestaw składników języka Java, których można użyć do komunikowania się z Event Hubs z topologii burzy.Microsoft provides a set of Java components that can be used to communicate with Event Hubs from a Storm topology. Plik archiwum Java (JAR) zawierający zgodną wersję usługi HDInsight 3,6 można znaleźć pod adresem 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.

Ważne

Chociaż składniki są zapisywane w języku Java, można je łatwo wykorzystać z C# topologii.While the components are written in Java, you can easily use them from a C# topology.

W tym przykładzie używane są następujące składniki:The following components are used in this example:

  • EventHubSpout: Odczytuje dane z Event Hubs.EventHubSpout: Reads data from Event Hubs.
  • EventHubBolt: Zapisuje dane do Event Hubs.EventHubBolt: Writes data to Event Hubs.
  • EventHubSpoutConfig: Służy do konfigurowania EventHubSpout.EventHubSpoutConfig: Used to configure EventHubSpout.
  • EventHubBoltConfig: Służy do konfigurowania EventHubBolt.EventHubBoltConfig: Used to configure EventHubBolt.

Przykładowe użycie elementu SpoutExample spout usage

SCP.NET zapewnia metody dodawania EventHubSpout do topologii.SCP.NET provides methods for adding an EventHubSpout to your topology. Te metody ułatwiają dodawanie elementu Spout niż przy użyciu metod ogólnych do dodawania składnika Java.These methods make it easier to add a spout than using the generic methods for adding a Java component. Poniższy przykład ilustruje sposób tworzenia elementu Spout przy użyciu metod SetEventHubSpout i EventHubSpoutConfig dostarczonych przez 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);

Poprzedni przykład tworzy nowy składnik elementu Spout o nazwie __EventHubSpout__i konfiguruje go do komunikacji z centrum zdarzeń.The previous example creates a new spout component named EventHubSpout, and configures it to communicate with an event hub. Warunek równoległości dla składnika jest ustawiony na liczbę partycji w centrum zdarzeń.The parallelism hint for the component is set to the number of partitions in the event hub. To ustawienie umożliwia burzę w celu utworzenia wystąpienia składnika dla każdej partycji.This setting allows Storm to create an instance of the component for each partition.

Przykładowe użycie piorunaExample bolt usage

Użyj metody JavaComponmentConstructor , aby utworzyć wystąpienie obiektu.Use the JavaComponmentConstructor method to create an instance of the bolt. W poniższym przykładzie pokazano, jak utworzyć i skonfigurować nowe wystąpienie 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");

Uwaga

W tym przykładzie użyto wyrażenia Clojure przekazaną jako ciąg, a nie za pomocą JavaComponentConstructor do utworzenia EventHubBoltConfig, jako przykładu elementu Spout.This example uses a Clojure expression passed as a string, instead of using JavaComponentConstructor to create an EventHubBoltConfig, as the spout example did. Każda metoda działa.Either method works. Użyj metody, która jest najbardziej przydatna.Use the method that feels best to you.

Pobierz ukończony projektDownload the completed project

Możesz pobrać kompletną wersję projektu utworzoną w tym artykule z usługi GitHub.You can download a complete version of the project created in this article from GitHub. Jednak nadal trzeba podać ustawienia konfiguracji, wykonując kroki opisane w tym artykule.However, you still need to provide configuration settings by following the steps in this article.

Wymagania wstępnePrerequisites

Pobierz składniki Event HubsDownload the Event Hubs components

Pobierz Event Hubs i składnik elementu Spout z 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.

Utwórz katalog o nazwie eventhubspouti Zapisz plik w katalogu.Create a directory named eventhubspout, and save the file into the directory.

Konfigurowanie Event HubsConfigure Event Hubs

Event Hubs jest źródłem danych dla tego przykładu.Event Hubs is the data source for this example. Skorzystaj z informacji w sekcji "Tworzenie centrum zdarzeń" tematu wprowadzenie do Event Hubs.Use the information in the "Create an event hub" section of Get started with Event Hubs.

  1. Po utworzeniu centrum zdarzeń Sprawdź ustawienia centrum EventHub w Azure Portal i wybierz pozycję zasady dostępu współdzielonego.After the event hub has been created, view the EventHub settings in the Azure portal, and select Shared access policies. Wybierz pozycję + Dodaj , aby dodać następujące zasady:Select + Add to add the following policies:

    NameName UprawnieniaPermissions
    autorwriter WyślijSend
    czytelnikreader NasłuchujListen

    Zrzut ekranu przedstawiający okno zasady dostępu do udziału

  2. Wybierz zasady czytnika i składnika zapisywania .Select the reader and writer policies. Skopiuj i Zapisz wartość klucza podstawowego dla obu zasad, ponieważ te wartości są używane później.Copy and save the primary key value for both policies, as these values are used later.

Konfigurowanie EventHubWriterConfigure the EventHubWriter

  1. Jeśli nie zainstalowano jeszcze najnowszej wersji narzędzi HDInsight Tools for Visual Studio, zobacz Rozpoczynanie pracy przy użyciu narzędzi HDInsight Tools for 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. Pobierz rozwiązanie z centrum eventhub — burze hybrydowe.Download the solution from eventhub-storm-hybrid.

  3. W projekcie EventHubWriter Otwórz plik App. config .In the EventHubWriter project, open the App.config file. Użyj informacji z centrum zdarzeń, które zostały wcześniej skonfigurowane, aby wypełnić wartość następujących kluczy:Use the information from the event hub that you configured earlier to fill in the value for the following keys:

    KluczKey ValueValue
    EventHubPolicyNameEventHubPolicyName składnik zapisywania (Jeśli użyto innej nazwy dla zasad z uprawnieniami do wysyłania , Użyj zamiast niej).writer (If you used a different name for the policy with Send permission, use it instead.)
    EventHubPolicyKeyEventHubPolicyKey Klucz dla zasad składnika zapisywania.The key for the writer policy.
    EventHubNamespaceEventHubNamespace Przestrzeń nazw, która zawiera centrum zdarzeń.The namespace that contains your event hub.
    EventHubNameEventHubName Nazwa centrum zdarzeń.Your event hub name.
    EventHubPartitionCountEventHubPartitionCount Liczba partycji w centrum zdarzeń.The number of partitions in your event hub.
  4. Zapisz i zamknij plik App. config .Save and close the App.config file.

Konfigurowanie EventHubReaderConfigure the EventHubReader

  1. Otwórz projekt EventHubReader .Open the EventHubReader project.

  2. Otwórz plik App. config dla EventHubReader.Open the App.config file for the EventHubReader. Użyj informacji z centrum zdarzeń, które zostały wcześniej skonfigurowane, aby wypełnić wartość następujących kluczy:Use the information from the event hub that you configured earlier to fill in the value for the following keys:

    KluczKey ValueValue
    EventHubPolicyNameEventHubPolicyName czytnik (Jeśli użyto innej nazwy dla zasad z uprawnieniami nasłuchiwania , Użyj zamiast niej).reader (If you used a different name for the policy with listen permission, use it instead.)
    EventHubPolicyKeyEventHubPolicyKey Klucz dla zasad czytnika.The key for the reader policy.
    EventHubNamespaceEventHubNamespace Przestrzeń nazw, która zawiera centrum zdarzeń.The namespace that contains your event hub.
    EventHubNameEventHubName Nazwa centrum zdarzeń.Your event hub name.
    EventHubPartitionCountEventHubPartitionCount Liczba partycji w centrum zdarzeń.The number of partitions in your event hub.
  3. Zapisz i zamknij plik App. config .Save and close the App.config file.

Wdrażanie topologiiDeploy the topologies

  1. W Eksplorator rozwiązańkliknij prawym przyciskiem myszy projekt EventHubReader , a następnie wybierz pozycję Prześlij do burzy w usłudze HDInsight.From Solution Explorer, right-click the EventHubReader project, and select Submit to Storm on HDInsight.

    Zrzut ekranu przedstawiający Eksplorator rozwiązań, z opcją Prześlij do burzy w usłudze HDInsight

  2. W oknie dialogowym przesyłanie topologii wybierz klaster burzy.On the Submit Topology dialog box, select your Storm Cluster. Rozwiń węzeł dodatkowe konfiguracje, wybierz pozycję ścieżki plików w języku Java, wybierz pozycję ... , a następnie wybierz katalog zawierający pobrany wcześniej plik JAR.Expand Additional Configurations, select Java File Paths, select ..., and select the directory that contains the JAR file that you downloaded earlier. Na koniec kliknij przycisk Prześlij.Finally, click Submit.

    Zrzut ekranu przedstawiający okno dialogowe topologia przesyłania

  3. Po przesłaniu topologii pojawia się Podgląd topologii burzy .When the topology has been submitted, the Storm Topologies Viewer appears. Aby wyświetlić informacje o topologii, wybierz topologię EventHubReader w lewym okienku.To view information about the topology, select the EventHubReader topology in the left pane.

    Zrzut ekranu przedstawiający przeglądarkę topologii burzy

  4. W Eksplorator rozwiązańkliknij prawym przyciskiem myszy projekt EventHubWriter , a następnie wybierz pozycję Prześlij do burzy w usłudze HDInsight.From Solution Explorer, right-click the EventHubWriter project, and select Submit to Storm on HDInsight.

  5. W oknie dialogowym przesyłanie topologii wybierz klaster burzy.On the Submit Topology dialog box, select your Storm Cluster. Rozwiń węzeł dodatkowe konfiguracje, wybierz pozycję ścieżki plików w języku Java, wybierz pozycję ... , a następnie wybierz katalog zawierający pobrany wcześniej plik JAR.Expand Additional Configurations, select Java File Paths, select ..., and select the directory that contains the JAR file you downloaded earlier. Na koniec kliknij przycisk Prześlij.Finally, click Submit.

  6. Po przesłaniu topologii Odśwież listę topologii w podglądzie topologii burzy , aby sprawdzić, czy obie topologie są uruchomione w klastrze.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 obszarze Podgląd topologii burzywybierz topologię EventHubReader .In Storm Topologies Viewer, select the EventHubReader topology.

  8. Aby otworzyć podsumowanie składnika dla pioruna, kliknij dwukrotnie składnik LogBolt na diagramie.To open the component summary for the bolt, double-click the LogBolt component in the diagram.

  9. W sekcji wykonawcy wybierz jedno z łączy w kolumnie port .In the Executors section, select one of the links in the Port column. Spowoduje to wyświetlenie informacji zarejestrowanych przez składnik.This displays information logged by the component. Zarejestrowane informacje są podobne do następujących: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"}
    

Zatrzymywanie topologiiStop the topologies

Aby zatrzymać topologie, zaznacz każdą topologię w przeglądarce topologii burzy, a następnie kliknij przycisk Kill.To stop the topologies, select each topology in the Storm Topology Viewer, then click Kill.

Zrzut ekranu przedstawiający przeglądarkę topologii burzy z wyróżnionym przyciskiem Kill

Usuwanie klastraDelete your cluster

Ostrzeżenie

Opłaty za klastry usługi HDInsight są naliczane proporcjonalnie za minutę, niezależnie od tego, czy są używane.Billing for HDInsight clusters is prorated per minute, whether you use them or not. Pamiętaj o usunięciu klastra po zakończeniu korzystania z niego.Be sure to delete your cluster after you finish using it. Zobacz Jak usunąć klaster usługi HDInsight.See how to delete an HDInsight cluster.

Następne krokiNext steps

W tym dokumencie przedstawiono sposób używania elementu Spout Java Event Hubs i pioruna z C# topologii do pracy z danymi w usłudze 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. Aby dowiedzieć się więcej C# na temat tworzenia topologii, zobacz następujące tematy:To learn more about creating C# topologies, see the following: