Zelfstudie: Schrijven naar Apache Hadoop HDFS van Apache Storm in azure HDInsightTutorial: Write to Apache Hadoop HDFS from Apache Storm on Azure HDInsight

In deze zelf studie ziet u hoe u Apache Storm kunt gebruiken om gegevens te schrijven naar de met HDFS compatibele opslag die door Apache Storm op HDInsight wordt gebruikt.This tutorial demonstrates how to use Apache Storm to write data to the HDFS-compatible storage used by Apache Storm on HDInsight. HDInsight kan zowel Azure Storage als Azure Data Lake Storage als HDFS-compatibele opslag gebruiken.HDInsight can use both Azure Storage and Azure Data Lake Storage as HDFS-compatible storage. Storm biedt een HdfsBolt -onderdeel dat gegevens naar HDFS schrijft.Storm provides an HdfsBolt component that writes data to HDFS. Dit document bevat informatie over het schrijven naar elk type opslag van de HdfsBolt.This document provides information on writing to either type of storage from the HdfsBolt.

De voor beeld-topologie die in dit document wordt gebruikt, is afhankelijk van onderdelen die zijn opgenomen in Storm op HDInsight.The example topology used in this document relies on components that are included with Storm on HDInsight. Het kan nodig zijn om met Azure Data Lake Storage te werken wanneer het wordt gebruikt met andere Apache Storm clusters.It may require modification to work with Azure Data Lake Storage when used with other Apache Storm clusters.

In deze zelfstudie leert u het volgende:In this tutorial, you learn how to:

  • Het cluster met een script actie configurerenConfigure the cluster with script action
  • De topologie bouwen en inpakkenBuild and package the topology
  • De topologie implementeren en uitvoerenDeploy and run the topology
  • Uitvoer gegevens weer gevenView output data
  • De topologie stoppenStop the topology

VereistenPrerequisites

VoorbeeldconfiguratieExample configuration

De volgende YAML is een uittreksel uit het resources/writetohdfs.yaml bestand dat in het voor beeld is opgenomen.The following YAML is an excerpt from the resources/writetohdfs.yaml file included in the example. Dit bestand definieert de Storm-topologie met behulp van het stroom raamwerk voor Apache Storm.This file defines the Storm topology using the Flux framework for Apache Storm.

components:
  - id: "syncPolicy"
    className: "org.apache.storm.hdfs.bolt.sync.CountSyncPolicy"
    constructorArgs:
      - 1000

  # Rotate files when they hit 5 MB
  - id: "rotationPolicy"
    className: "org.apache.storm.hdfs.bolt.rotation.FileSizeRotationPolicy"
    constructorArgs:
      - 5
      - "MB"

  - id: "fileNameFormat"
    className: "org.apache.storm.hdfs.bolt.format.DefaultFileNameFormat"
    configMethods:
      - name: "withPath"
        args: ["${hdfs.write.dir}"]
      - name: "withExtension"
        args: [".txt"]

  - id: "recordFormat"
    className: "org.apache.storm.hdfs.bolt.format.DelimitedRecordFormat"
    configMethods:
      - name: "withFieldDelimiter"
        args: ["|"]

# spout definitions
spouts:
  - id: "tick-spout"
    className: "com.microsoft.example.TickSpout"
    parallelism: 1


# bolt definitions
bolts:
  - id: "hdfs-bolt"
    className: "org.apache.storm.hdfs.bolt.HdfsBolt"
    configMethods:
      - name: "withConfigKey"
        args: ["hdfs.config"]
      - name: "withFsUrl"
        args: ["${hdfs.url}"]
      - name: "withFileNameFormat"
        args: [ref: "fileNameFormat"]
      - name: "withRecordFormat"
        args: [ref: "recordFormat"]
      - name: "withRotationPolicy"
        args: [ref: "rotationPolicy"]
      - name: "withSyncPolicy"
        args: [ref: "syncPolicy"]

Deze YAML definieert de volgende items:This YAML defines the following items:

  • syncPolicy: Hiermee wordt gedefinieerd wanneer bestanden worden gesynchroniseerd/verwijderd naar het bestands systeem.syncPolicy: Defines when files are synched/flushed to the file system. In dit voor beeld worden elke 1000 Tuples.In this example, every 1000 tuples.
  • fileNameFormat: Hiermee definieert u het pad en de bestands naam patroon die moeten worden gebruikt bij het schrijven van bestanden.fileNameFormat: Defines the path and file name pattern to use when writing files. In dit voor beeld wordt het pad gegeven tijdens runtime met behulp van een filter en de bestands .txtextensie.In this example, the path is provided at runtime using a filter, and the file extension is .txt.
  • recordFormat: Hiermee wordt de interne indeling van de geschreven bestanden gedefinieerd.recordFormat: Defines the internal format of the files written. In dit voor beeld worden velden gescheiden door het | teken.In this example, fields are delimited by the | character.
  • rotationPolicy: Hiermee wordt gedefinieerd wanneer bestanden worden gedraaid.rotationPolicy: Defines when to rotate files. In dit voor beeld wordt er geen draaiing uitgevoerd.In this example, no rotation is performed.
  • hdfs-bolt: Gebruikt de vorige onderdelen als configuratie parameters voor de HdfsBolt klasse.hdfs-bolt: Uses the previous components as configuration parameters for the HdfsBolt class.

Zie https://storm.apache.org/releases/current/flux.htmlvoor meer informatie over het stroom kader.For more information on the Flux framework, see https://storm.apache.org/releases/current/flux.html.

Het cluster configurerenConfigure the cluster

Storm op HDInsight bevat standaard geen onderdelen die HdfsBolt worden gebruikt om te communiceren met Azure Storage of Data Lake Storage in het klassenpad van Storm.By default, Storm on HDInsight does not include the components that HdfsBolt uses to communicate with Azure Storage or Data Lake Storage in Storm's classpath. Gebruik de volgende script actie om deze onderdelen toe te voegen aan de extlib Directory voor Storm op het cluster:Use the following script action to add these components to the extlib directory for Storm on your cluster:

EigenschapProperty ValueValue
ScripttypeScript type -Aangepast- Custom
Bash-script-URIBash script URI https://hdiconfigactions.blob.core.windows.net/linuxstormextlibv01/stormextlib.sh
Knooppunt type (n)Node type(s) Nimbus, SupervisorNimbus, Supervisor
ParametersParameters GeenNone

Zie het document HDInsight-clusters aanpassen met script acties voor meer informatie over het gebruik van dit script met uw cluster.For information on using this script with your cluster, see the Customize HDInsight clusters using script actions document.

De topologie bouwen en inpakkenBuild and package the topology

  1. Down load het voorbeeld project https://github.com/Azure-Samples/hdinsight-storm-azure-data-lake-store van naar uw ontwikkel omgeving.Download the example project from https://github.com/Azure-Samples/hdinsight-storm-azure-data-lake-store to your development environment.

  2. Wijzig vanuit een opdracht prompt, Terminal of shell-sessie de mappen in de hoofdmap van het gedownloade project.From a command prompt, terminal, or shell session, change directories to the root of the downloaded project. Gebruik de volgende opdracht om de topologie te bouwen en in te pakken:To build and package the topology, use the following command:

    mvn compile package
    

    Zodra het build-en pakket is voltooid, is er een nieuwe map targetmet de naam, die een StormToHdfs-1.0-SNAPSHOT.jarbestand bevat met de naam.Once the build and packaging completes, there is a new directory named target, that contains a file named StormToHdfs-1.0-SNAPSHOT.jar. Dit bestand bevat de gecompileerde topologie.This file contains the compiled topology.

De topologie implementeren en uitvoerenDeploy and run the topology

  1. Gebruik de volgende opdracht om de topologie naar het HDInsight-cluster te kopiëren.Use the following command to copy the topology to the HDInsight cluster. Vervang CLUSTERNAME door de naam van het cluster.Replace CLUSTERNAME with the name of the cluster.

    scp target\StormToHdfs-1.0-SNAPSHOT.jar sshuser@CLUSTERNAME-ssh.azurehdinsight.net:StormToHdfs-1.0-SNAPSHOT.jar
    
  2. Nadat het uploaden is voltooid, gebruikt u de volgende om via SSH verbinding te maken met het HDInsight-cluster.Once the upload completes, use the following to connect to the HDInsight cluster using SSH. Vervang CLUSTERNAME door de naam van het cluster.Replace CLUSTERNAME with the name of the cluster.

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  3. Als de verbinding tot stand is gebracht, gebruikt u de volgende dev.propertiesopdracht om een bestand te maken met de naam:Once connected, use the following command to create a file named dev.properties:

    nano dev.properties
    
  4. Gebruik de volgende tekst als de inhoud van het dev.properties bestand.Use the following text as the contents of the dev.properties file. Wijzig indien nodig op basis van uw URI-schema.Revise as needed based on your URI scheme.

    hdfs.write.dir: /stormdata/
    hdfs.url: wasbs:///
    

    Gebruik CTRL + X, vervolgens __Y__en tenslotte __Enter__om het bestand op te slaan.To save the file, use Ctrl + X, then Y, and finally Enter. De waarden in dit bestand instellen de opslag-URL en de naam van de map waarnaar gegevens worden geschreven.The values in this file set the storage URL and the directory name that data is written to.

  5. Gebruik de volgende opdracht om de topologie te starten:Use the following command to start the topology:

    storm jar StormToHdfs-1.0-SNAPSHOT.jar org.apache.storm.flux.Flux --remote -R /writetohdfs.yaml --filter dev.properties
    

    Met deze opdracht wordt de topologie gestart met het stroom raamwerk door deze te verzenden naar het Nimbus-knoop punt van het cluster.This command starts the topology using the Flux framework by submitting it to the Nimbus node of the cluster. De topologie wordt gedefinieerd door het writetohdfs.yaml bestand dat in het jar is opgenomen.The topology is defined by the writetohdfs.yaml file included in the jar. Het dev.properties bestand wordt door gegeven als een filter en de waarden in het bestand worden door de topologie gelezen.The dev.properties file is passed as a filter, and the values contained in the file are read by the topology.

Uitvoer gegevens weer gevenView output data

Als u de gegevens wilt weer geven, gebruikt u de volgende opdracht:To view the data, use the following command:

hdfs dfs -ls /stormdata/

Er wordt een lijst weer gegeven met de bestanden die door deze topologie zijn gemaakt.A list of the files created by this topology is displayed. De volgende lijst bevat een voor beeld van de gegevens die door de vorige opdrachten worden geretourneerd:The following list is an example of the data returned by the previous commands:

Found 23 items
-rw-r--r--   1 storm supergroup    5242880 2019-06-24 20:25 /stormdata/hdfs-bolt-3-0-1561407909895.txt
-rw-r--r--   1 storm supergroup    5242880 2019-06-24 20:25 /stormdata/hdfs-bolt-3-1-1561407915577.txt
-rw-r--r--   1 storm supergroup    5242880 2019-06-24 20:25 /stormdata/hdfs-bolt-3-10-1561407943327.txt
-rw-r--r--   1 storm supergroup    5242880 2019-06-24 20:25 /stormdata/hdfs-bolt-3-11-1561407946312.txt
-rw-r--r--   1 storm supergroup    5242880 2019-06-24 20:25 /stormdata/hdfs-bolt-3-12-1561407949320.txt
-rw-r--r--   1 storm supergroup    5242880 2019-06-24 20:25 /stormdata/hdfs-bolt-3-13-1561407952662.txt
-rw-r--r--   1 storm supergroup    5242880 2019-06-24 20:25 /stormdata/hdfs-bolt-3-14-1561407955502.txt

De topologie stoppenStop the topology

Storm-topologieën worden uitgevoerd tot deze worden gestopt of het cluster wordt verwijderd.Storm topologies run until stopped, or the cluster is deleted. Gebruik de volgende opdracht om de topologie te stoppen:To stop the topology, use the following command:

storm kill hdfswriter

Resources opschonenClean up resources

Als u de in deze zelfstudie gemaakte resources wilt opschonen, kunt u de resourcegroep verwijderen.To clean up the resources created by this tutorial, you can delete the resource group. Als u de resourcegroep verwijdert, worden ook het bijbehorende HDInsight-cluster en eventuele andere resources die aan de resourcegroep zijn gekoppeld, verwijderd.Deleting the resource group also deletes the associated HDInsight cluster, and any other resources associated with the resource group.

Ga als volgt te werk om de resourcegroep te verwijderen in Azure Portal:To remove the resource group using the Azure portal:

  1. Vouw het menu aan de linkerkant in Azure Portal uit om het menu met services te openen en kies Resourcegroepen om de lijst met resourcegroepen weer te geven.In the Azure portal, expand the menu on the left side to open the menu of services, and then choose Resource Groups to display the list of your resource groups.
  2. Zoek de resourcegroep die u wilt verwijderen en klik met de rechtermuisknop op de knop Meer (... ) aan de rechterkant van de vermelding.Locate the resource group to delete, and then right-click the More button (...) on the right side of the listing.
  3. Selecteer Resourcegroep verwijderen en bevestig dit.Select Delete resource group, and then confirm.

Volgende stappenNext steps

In deze zelf studie hebt u geleerd hoe u Apache Storm kunt gebruiken om gegevens te schrijven naar de met HDFS compatibele opslag die door Apache Storm op HDInsight wordt gebruikt.In this tutorial, you learned how to use Apache Storm to write data to the HDFS-compatible storage used by Apache Storm on HDInsight.