HDInsight 'ta Apache Storm ile Azure Event Hubs olayları işleme (C#)Process events from Azure Event Hubs with Apache Storm on HDInsight (C#)

HDInsight üzerinde Apache Storm Azure Event Hubs ile nasıl çalışacağınızı öğrenin.Learn how to work with Azure Event Hubs from Apache Storm on HDInsight. Bu belge Event Hubs verileri C# okumak ve yazmak için bir fırtınası topolojisi kullanırThis document uses a C# Storm topology to read and write data from Event Hubs

SCP.NETSCP.NET

Bu belgedeki adımlarda, HDInsight üzerinde fırtınası ile kullanım için topolojiler ve bileşenler oluşturmayı C# kolaylaştıran bir NuGet paketi olan SCP.net kullanılır.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.

HDInsight 3,4 ve üzeri topoloji çalıştırmak C# için mono kullanın.HDInsight 3.4 and greater use Mono to run C# topologies. Bu belgede kullanılan örnek HDInsight 3,6 ile birlikte çalışmaktadır.The example used in this document works with HDInsight 3.6. HDInsight için kendi .NET çözümlerinizi oluşturmayı planlıyorsanız olası uyumsuzluklar için mono uyumluluk belgesini kontrol edin.If you plan on creating your own .NET solutions for HDInsight, check the Mono compatibility document for potential incompatibilities.

Küme sürümü oluşturmaCluster versioning

Projeniz için kullandığınız Microsoft. SCP. net. SDK NuGet paketi, HDInsight üzerinde yüklü olan birincil fırtınası sürümüyle aynı olmalıdır.The Microsoft.SCP.Net.SDK NuGet package you use for your project must match the major version of Storm installed on HDInsight. HDInsight sürümleri 3,5 ve 3,6, fırtınası 1. x kullanır, bu nedenle SCP.NET Version 1.0. x. x 'i bu kümeleriyle kullanmanız gerekir.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.

C#topolojiler ayrıca .NET 4,5 ' i de hedeflemelidir.C# topologies must also target .NET 4.5.

Event Hubs ile çalışmaHow to work with Event Hubs

Microsoft, bir fırtınası topolojisinden Event Hubs iletişim kurmak için kullanılabilecek bir Java bileşenleri kümesi sağlar.Microsoft provides a set of Java components that can be used to communicate with Event Hubs from a Storm topology. Bu bileşenlerin HDInsight 3,6 ile uyumlu bir sürümünü içeren Java Arşivi (JAR) dosyasını https://github.com/hdinsight/mvn-repo/raw/master/org/apache/storm/storm-eventhubs/1.1.0.1/storm-eventhubs-1.1.0.1.jaradresinde bulabilirsiniz.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.

Önemli

Bileşenler Java 'da yazılırken, bunları bir C# topolojiden kolayca kullanabilirsiniz.While the components are written in Java, you can easily use them from a C# topology.

Aşağıdaki bileşenler bu örnekte kullanılır:The following components are used in this example:

  • Eventhubspout: Event Hubs verilerini okur.EventHubSpout: Reads data from Event Hubs.
  • Eventhubcıvata: verileri Event Hubs yazar.EventHubBolt: Writes data to Event Hubs.
  • Eventhubspoutconfig: EventHubSpout 'yi yapılandırmak için kullanılır.EventHubSpoutConfig: Used to configure EventHubSpout.
  • Eventhubcıvatconfig: eventhubcıvaı yapılandırmak için kullanılır.EventHubBoltConfig: Used to configure EventHubBolt.

Örnek Spout kullanımıExample spout usage

SCP.NET topolojinize EventHubSpout eklemek için yöntemler sağlar.SCP.NET provides methods for adding an EventHubSpout to your topology. Bu yöntemler, bir Java bileşeni eklemek için genel yöntemleri kullanmaktan daha kolay bir Spout eklemeyi kolaylaştırır.These methods make it easier to add a spout than using the generic methods for adding a Java component. Aşağıdaki örnek, SCP.NET tarafından sunulan Seteventhubspout ve Eventhubspoutconfig yöntemlerini kullanarak Spout oluşturmayı göstermektedir: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);

Önceki örnekte __Eventhubspout__adlı yeni bir Spout bileşeni oluşturulur ve bunu bir olay hub 'ı ile iletişim kuracak şekilde yapılandırır.The previous example creates a new spout component named EventHubSpout, and configures it to communicate with an event hub. Bileşen için paralellik ipucu, Olay Hub 'ındaki bölüm sayısına ayarlanır.The parallelism hint for the component is set to the number of partitions in the event hub. Bu ayar, fırtınası 'nın her bölüm için bileşenin bir örneğini oluşturmasına izin verir.This setting allows Storm to create an instance of the component for each partition.

Örnek sürgüsü kullanımıExample bolt usage

Bir cıvacının örneğini oluşturmak için Javabileşen Mentconstructor metodunu kullanın.Use the JavaComponmentConstructor method to create an instance of the bolt. Aşağıdaki örnek, Eventhubcıvaunyeni bir örneğini oluşturmayı ve yapılandırmayı gösterir: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");

Not

Bu örnek, Spout örneği gibi bir Eventhubcıvatconfigoluşturmak Için javacomponentconstructor yerine bir dize olarak geçirilen bir Clojure ifadesi kullanır.This example uses a Clojure expression passed as a string, instead of using JavaComponentConstructor to create an EventHubBoltConfig, as the spout example did. Her iki yöntem de işe yarar.Either method works. Size en uygun yöntemi kullanın.Use the method that feels best to you.

Tamamlanmış projeyi indirinDownload the completed project

Bu makalede oluşturulan projenin tüm sürümünü GitHub'dan indirebilirsiniz.You can download a complete version of the project created in this article from GitHub. Ancak, bu makaledeki adımları izleyerek yapılandırma ayarlarını yine de sağlamanız gerekir.However, you still need to provide configuration settings by following the steps in this article.

Ön koşullarPrerequisites

Event Hubs bileşenlerini indirinDownload the Event Hubs components

https://github.com/hdinsight/mvn-repo/raw/master/org/apache/storm/storm-eventhubs/1.1.0.1/storm-eventhubs-1.1.0.1.jarEvent Hubs Spout ve cıvam bileşenini indirin.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.

eventhubspoutadlı bir dizin oluşturun ve dosyayı dizine kaydedin.Create a directory named eventhubspout, and save the file into the directory.

Event Hubs YapılandırConfigure Event Hubs

Event Hubs Bu örnek için veri kaynağıdır.Event Hubs is the data source for this example. Event Hubs kullanmaya başlamakonusunun "bir olay hub 'ı oluşturma" bölümündeki bilgileri kullanın.Use the information in the "Create an event hub" section of Get started with Event Hubs.

  1. Olay Hub 'ı oluşturulduktan sonra, Azure portal EventHub ayarlarını görüntüleyin ve paylaşılan erişim ilkeleri' ni seçin.After the event hub has been created, view the EventHub settings in the Azure portal, and select Shared access policies. Aşağıdaki ilkeleri oluşturmak için + Ekle ' yi seçin:Select + Add to create the following policies:

    AdName İzinlerPermissions
    yazarıwriter GönderSend
    okuyucureader DinleListen

    Erişim ilkelerini paylaşma penceresinin ekran görüntüsü

  2. Okuyucu ve Yazıcı ilkelerini seçin.Select the reader and writer policies. Bu değerler daha sonra kullanıldığından, her iki ilke için de birincil anahtar değerini kopyalayın ve kaydedin.Copy and save the primary key value for both policies, as these values are used later.

EventHubWriter 'ı yapılandırmaConfigure the EventHubWriter

  1. Visual Studio için HDInsight araçları 'nın en son sürümünü henüz yüklemediyseniz bkz. Visual Studio Için HDInsight araçlarını kullanmaya başlama.If you haven't already installed the latest version of the HDInsight tools for Visual Studio, see Get started using HDInsight tools for Visual Studio.

  2. Çözümü eventhub-fırtınası-karmakonumundan indirin.Download the solution from eventhub-storm-hybrid.

  3. Eventhubexample. slnöğesini açın.Open EventHubExample.sln. Eventhubwriter projesinde app. config dosyasını açın.In the EventHubWriter project, open the App.config file. Daha önce aşağıdaki anahtarlar için değeri dolduracak olan olay hub 'ında bulunan bilgileri kullanın:Use the information from the event hub that you configured earlier to fill in the value for the following keys:

    AnahtarKey DeğerValue
    EventHubPolicyNameEventHubPolicyName Yazıcı (ilke için gönderme izni olan farklı bir ad kullandıysanız bunun yerine kullanın.)writer (If you used a different name for the policy with Send permission, use it instead.)
    EventHubPolicyKeyEventHubPolicyKey Yazıcı ilkesi için anahtar.The key for the writer policy.
    EventHubNamespaceEventHubNamespace Olay Hub 'ınızı içeren ad alanı.The namespace that contains your event hub.
    EventHubNameEventHubName Olay Hub 'ınız adı.Your event hub name.
    EventHubPartitionCountEventHubPartitionCount Olay Hub 'ınızdaki bölüm sayısı.The number of partitions in your event hub.
  4. App. config dosyasını kaydedin ve kapatın.Save and close the App.config file.

EventHubReader 'ı yapılandırmaConfigure the EventHubReader

  1. Eventhubreader projesini açın.Open the EventHubReader project.

  2. Eventhubreaderiçin app. config dosyasını açın.Open the App.config file for the EventHubReader. Daha önce aşağıdaki anahtarlar için değeri dolduracak olan olay hub 'ında bulunan bilgileri kullanın:Use the information from the event hub that you configured earlier to fill in the value for the following keys:

    AnahtarKey DeğerValue
    EventHubPolicyNameEventHubPolicyName okuyucu ( dinleme izniyle ilke için farklı bir ad kullandıysanız, bunun yerine kullanın.)reader (If you used a different name for the policy with listen permission, use it instead.)
    EventHubPolicyKeyEventHubPolicyKey Okuyucu ilkesi için anahtar.The key for the reader policy.
    EventHubNamespaceEventHubNamespace Olay Hub 'ınızı içeren ad alanı.The namespace that contains your event hub.
    EventHubNameEventHubName Olay Hub 'ınız adı.Your event hub name.
    EventHubPartitionCountEventHubPartitionCount Olay Hub 'ınızdaki bölüm sayısı.The number of partitions in your event hub.
  3. App. config dosyasını kaydedin ve kapatın.Save and close the App.config file.

Topolojileri dağıtmaDeploy the topologies

  1. Çözüm Gezgini, Eventhubreader projesine sağ tıklayın ve HDInsight 'ta fırtınası 'ya gönder' i seçin.From Solution Explorer, right-click the EventHubReader project, and select Submit to Storm on HDInsight.

    HDInsight 'ta fırtınası üzerine gönder vurgulanmış Çözüm Gezgini ekran görüntüsü

  2. Topolojiyi gönder iletişim kutusunda, fırtınası kümeniziseçin.On the Submit Topology dialog box, select your Storm Cluster. Ek konfigürasyonlar' ı genişletin, Java dosya yolları' nı seçin, ... ' ı seçin ve daha önce indirdiğiniz jar dosyasını içeren dizini seçin.Expand Additional Configurations, select Java File Paths, select ..., and select the directory that contains the JAR file that you downloaded earlier. Son olarak Gönder' e tıklayın.Finally, click Submit.

    Gönderme topolojisi iletişim kutusunun ekran görüntüsü

  3. Topoloji gönderildiğinde, fırtınası topolojileri Görüntüleyicisi görüntülenir.When the topology has been submitted, the Storm Topologies Viewer appears. Topoloji hakkındaki bilgileri görüntülemek için sol bölmedeki Eventhubreader topolojisini seçin.To view information about the topology, select the EventHubReader topology in the left pane.

    Fırtınası topolojileri görüntüleyicisinin ekran görüntüsü

  4. Çözüm Gezgini, Eventhubwriter projesine sağ tıklayın ve HDInsight 'ta fırtınası 'ya gönder' i seçin.From Solution Explorer, right-click the EventHubWriter project, and select Submit to Storm on HDInsight.

  5. Topolojiyi gönder iletişim kutusunda, fırtınası kümeniziseçin.On the Submit Topology dialog box, select your Storm Cluster. Ek konfigürasyonlar' ı genişletin, Java dosya yolları' nı seçin, ... ' ı seçin ve daha önce indirdiğiniz jar dosyasını içeren dizini seçin.Expand Additional Configurations, select Java File Paths, select ..., and select the directory that contains the JAR file you downloaded earlier. Son olarak Gönder' e tıklayın.Finally, click Submit.

  6. Topoloji gönderildiğinde, her iki topolojinin kümede çalıştığından emin olmak için, fırtınası topolojileri görüntüleyicisinde topoloji listesini yenileyin.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. Fırtınası topolojileri görüntüleyicisinde Eventhubreader topolojisini seçin.In Storm Topologies Viewer, select the EventHubReader topology.

  8. Cıvatanın bileşen özetini açmak için diyagramdaki Logcıvata bileşeni çift tıklayın.To open the component summary for the bolt, double-click the LogBolt component in the diagram.

  9. Yürüticileri bölümünde bağlantı noktası sütunundaki bağlantılardan birini seçin.In the Executors section, select one of the links in the Port column. Bu, bileşen tarafından günlüğe kaydedilen bilgileri görüntüler.This displays information logged by the component. Günlüğe kaydedilen bilgiler aşağıdaki metne benzer: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"}
    

Topolojileri durdurmaStop the topologies

Topolojileri durdurmak için, fırtınası topolojisi görüntüleyicisindeher bir topoloji seçin ve ardından Sonlandır' ı tıklatın.To stop the topologies, select each topology in the Storm Topology Viewer, then click Kill.

Sonlandırma düğmesi vurgulanmış olan fırtınası topolojisi görüntüleyicisinin ekran görüntüsü

Kümenizi silmeDelete your cluster

Uyarı

HDInsight kümeleri için faturalandırma, bunları kullanıp kullanmayacağınızı, dakika başına eşit olarak dağıtılır.Billing for HDInsight clusters is prorated per minute, whether you use them or not. Kullanmayı bitirdikten sonra kümenizi sildiğinizden emin olun.Be sure to delete your cluster after you finish using it. Bkz. HDInsight kümesini silme.See how to delete an HDInsight cluster.

Sonraki adımlarNext steps

Bu belgede, Azure Event Hubs 'de verilerle çalışmak için bir C# topolojiden Java Event Hubs Spout ve cıvatın nasıl kullanılacağını öğrendiniz.In this document, you've learned how to use the Java Event Hubs spout and bolt from a C# topology to work with data in Azure Event Hubs. Topolojiler oluşturma C# hakkında daha fazla bilgi için aşağıdakilere bakın:To learn more about creating C# topologies, see the following: