Apache Storm topologieën ontwikkelen met behulp van python in HDInsightDevelop Apache Storm topologies using Python on HDInsight

Meer informatie over het maken van een Apache Storm topologie die gebruikmaakt van python-onderdelen.Learn how to create an Apache Storm topology that uses Python components. Apache Storm ondersteunt meerdere talen, waardoor u zelfs onderdelen uit verschillende talen in één topologie kunt combi neren.Apache Storm supports multiple languages, even allowing you to combine components from several languages in one topology. Met het stroom kader (geïntroduceerd in Storm 0.10.0) kunt u eenvoudig oplossingen maken die gebruikmaken van python-onderdelen.The Flux framework (introduced with Storm 0.10.0) allows you to easily create solutions that use Python components.

Belangrijk

De informatie in dit document is getest met Storm op HDInsight 3,6.The information in this document was tested using Storm on HDInsight 3.6.

De code voor dit project is beschikbaar op https://github.com/Azure-Samples/hdinsight-python-storm-wordcount.The code for this project is available at https://github.com/Azure-Samples/hdinsight-python-storm-wordcount.

VereistenPrerequisites

  • Python 2,7 of hogerPython 2.7 or higher

  • Java JDK 1,8 of hogerJava JDK 1.8 or higher

  • Apache Maven 3Apache Maven 3

  • Beschrijving Een lokale Storm-ontwikkel omgeving.(Optional) A local Storm development environment. Een lokale Storm-omgeving is alleen nodig als u de topologie lokaal wilt uitvoeren.A local Storm environment is only needed if you want to run the topology locally. Zie een ontwikkel omgeving instellenvoor meer informatie.For more information, see Setting up a development environment.

Ondersteuning voor Storm meerdere talenStorm multi-language support

Apache Storm is ontworpen om te werken met onderdelen die zijn geschreven met behulp van een programmeer taal.Apache Storm was designed to work with components written using any programming language. De onderdelen moeten weten hoe u kunt werken met de Thrift-definitie voor Storm.The components must understand how to work with the Thrift definition for Storm. Voor python wordt een module meegeleverd als onderdeel van het Apache Storm project, waarmee u eenvoudig kunt interface met storm.For Python, a module is provided as part of the Apache Storm project that allows you to easily interface with Storm. U kunt deze module vinden op https://github.com/apache/storm/blob/master/storm-multilang/python/src/main/resources/resources/storm.py.You can find this module at https://github.com/apache/storm/blob/master/storm-multilang/python/src/main/resources/resources/storm.py.

Storm is een Java-proces dat wordt uitgevoerd op de Java Virtual Machine (JVM).Storm is a Java process that runs on the Java Virtual Machine (JVM). Onderdelen die in andere talen zijn geschreven, worden uitgevoerd als subprocessen.Components written in other languages are executed as subprocesses. De Storm communiceert met deze subprocessen met behulp van JSON-berichten die via stdin/stdout worden verzonden.The Storm communicates with these subprocesses using JSON messages sent over stdin/stdout. Meer informatie over de communicatie tussen onderdelen vindt u in de documentatie over het multi-lang protocol .More details on communication between components can be found in the Multi-lang Protocol documentation.

Python met het stroom kaderPython with the Flux framework

Met het stroom raamwerk kunt u Storm-topologieën afzonderlijk van de onderdelen definiëren.The Flux framework allows you to define Storm topologies separately from the components. Het stroom raamwerk gebruikt YAML om de Storm-topologie te definiëren.The Flux framework uses YAML to define the Storm topology. De volgende tekst is een voor beeld van het verwijzen naar een python-onderdeel in het YAML-document:The following text is an example of how to reference a Python component in the YAML document:

# Spout definitions
spouts:
  - id: "sentence-spout"
    className: "org.apache.storm.flux.wrappers.spouts.FluxShellSpout"
    constructorArgs:
      # Command line
      - ["python", "sentencespout.py"]
      # Output field(s)
      - ["sentence"]
    # parallelism hint
    parallelism: 1

De klasse FluxShellSpout wordt gebruikt om het sentencespout.py script te starten dat de Spout implementeert.The class FluxShellSpout is used to start the sentencespout.py script that implements the spout.

Stroom verwacht dat de python-scripts zich bevinden in de /resources map in het jar-bestand dat de topologie bevat.Flux expects the Python scripts to be in the /resources directory inside the jar file that contains the topology. In dit voor beeld worden de python-scripts /multilang/resources in de Directory opgeslagen.So this example stores the Python scripts in the /multilang/resources directory. Het pom.xml bevat dit bestand met de volgende XML:The pom.xml includes this file using the following XML:

<!-- include the Python components -->
<resource>
    <directory>${basedir}/multilang</directory>
    <filtering>false</filtering>
</resource>

Zoals eerder vermeld, is er een storm.py bestand dat de Thrift-definitie voor Storm implementeert.As mentioned earlier, there is a storm.py file that implements the Thrift definition for Storm. Het stroom kader wordt storm.py automatisch opgenomen wanneer het project is gemaakt, zodat u zich geen zorgen hoeft te maken over het opnemen ervan.The Flux framework includes storm.py automatically when the project is built, so you don't have to worry about including it.

Het project bouwenBuild the project

Gebruik in de hoofdmap van het project de volgende opdracht:From the root of the project, use the following command:

mvn clean compile package

Met deze opdracht maakt target/WordCount-1.0-SNAPSHOT.jar u een bestand met de gecompileerde topologie.This command creates a target/WordCount-1.0-SNAPSHOT.jar file that contains the compiled topology.

De topologie lokaal uitvoerenRun the topology locally

Als u de topologie lokaal wilt uitvoeren, gebruikt u de volgende opdracht:To run the topology locally, use the following command:

storm jar WordCount-1.0-SNAPSHOT.jar org.apache.storm.flux.Flux -l -R /topology.yaml

Notitie

Voor deze opdracht is een lokale Storm-ontwikkel omgeving vereist.This command requires a local Storm development environment. Zie een ontwikkel omgeving instellen voor meer informatieFor more information, see Setting up a development environment

Zodra de topologie is gestart, wordt er informatie verzonden naar de lokale console, vergelijkbaar met de volgende tekst:Once the topology starts, it emits information to the local console similar to the following text:

24302 [Thread-25-sentence-spout-executor[4 4]] INFO  o.a.s.s.ShellSpout - ShellLog pid:2436, name:sentence-spout Emiting the cow jumped over the moon
24302 [Thread-30] INFO  o.a.s.t.ShellBolt - ShellLog pid:2438, name:splitter-bolt Emitting the
24302 [Thread-28] INFO  o.a.s.t.ShellBolt - ShellLog pid:2437, name:counter-bolt Emitting years:160
24302 [Thread-17-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {word=the, count=599}
24303 [Thread-17-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {word=seven, count=302}
24303 [Thread-17-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {word=dwarfs, count=143}
24303 [Thread-25-sentence-spout-executor[4 4]] INFO  o.a.s.s.ShellSpout - ShellLog pid:2436, name:sentence-spout Emiting the cow jumped over the moon
24303 [Thread-30] INFO  o.a.s.t.ShellBolt - ShellLog pid:2438, name:splitter-bolt Emitting cow
24303 [Thread-17-log-executor[3 3]] INFO  o.a.s.f.w.b.LogInfoBolt - {word=four, count=160}

Gebruik __CTRL + C__om de topologie te stoppen.To stop the topology, use Ctrl + C.

De Storm-topologie op HDInsight uitvoerenRun the Storm topology on HDInsight

  1. Gebruik de volgende opdracht om het WordCount-1.0-SNAPSHOT.jar bestand te kopiëren naar uw Storm op HDInsight-cluster:Use the following command to copy the WordCount-1.0-SNAPSHOT.jar file to your Storm on HDInsight cluster:

    scp target\WordCount-1.0-SNAPSHOT.jar sshuser@mycluster-ssh.azurehdinsight.net
    

    Vervang sshuser door de SSH-gebruiker voor uw cluster.Replace sshuser with the SSH user for your cluster. Vervang mycluster door de naam van het cluster.Replace mycluster with the cluster name. U wordt mogelijk gevraagd het wacht woord voor de SSH-gebruiker in te voeren.You may be prompted to enter the password for the SSH user.

    Zie SSH gebruiken met HDInsightvoor meer informatie over het gebruik van SSH en SCP.For more information on using SSH and SCP, see Use SSH with HDInsight.

  2. Nadat het bestand is geüpload, maakt u met SSH verbinding met het cluster:Once the file has been uploaded, connect to the cluster using SSH:

    ssh sshuser@mycluster-ssh.azurehdinsight.net
    
  3. Gebruik in de SSH-sessie de volgende opdracht om de topologie op het cluster te starten:From the SSH session, use the following command to start the topology on the cluster:

    storm jar WordCount-1.0-SNAPSHOT.jar org.apache.storm.flux.Flux -r -R /topology.yaml
    
  4. U kunt de Storm-gebruikers interface gebruiken om de topologie op het cluster weer te geven.You can use the Storm UI to view the topology on the cluster. De Storm-gebruikers interface bevindt zich op https://mycluster.azurehdinsight.net/stormui.The Storm UI is located at https://mycluster.azurehdinsight.net/stormui. Vervang mycluster door de naam van uw cluster.Replace mycluster with your cluster name.

Notitie

Zodra het is gestart, wordt een storm-topologie uitgevoerd totdat deze wordt gestopt.Once started, a Storm topology runs until stopped. Gebruik een van de volgende methoden om de topologie te stoppen:To stop the topology, use one of the following methods:

  • De storm kill TOPOLOGYNAME opdracht vanaf de opdracht regelThe storm kill TOPOLOGYNAME command from the command line
  • De knop Kill in de gebruikers interface van Storm.The Kill button in the Storm UI.

Volgende stappenNext steps

Raadpleeg de volgende documenten voor andere manieren om python te gebruiken met HDInsight:See the following documents for other ways to use Python with HDInsight: