Samouczek: zapisywanie do Apache Hadoop HDFS z Apache Storm w usłudze Azure HDInsightTutorial: Write to Apache Hadoop HDFS from Apache Storm on Azure HDInsight

W tym samouczku pokazano, jak za pomocą Apache Storm zapisywać dane do magazynu zgodnego z systemem plików HDFS używanego przez Apache Storm w usłudze HDInsight.This tutorial demonstrates how to use Apache Storm to write data to the HDFS-compatible storage used by Apache Storm on HDInsight. Usługa HDInsight może używać usługi Azure Storage i Azure Data Lake Storage jako magazynu zgodnego z systemem plików HDFS.HDInsight can use both Azure Storage and Azure Data Lake Storage as HDFS-compatible storage. Burza udostępnia składnik HdfsBolt , który zapisuje dane w systemie plików HDFS.Storm provides an HdfsBolt component that writes data to HDFS. Ten dokument zawiera informacje na temat zapisywania do dowolnego typu magazynu z HdfsBolt.This document provides information on writing to either type of storage from the HdfsBolt.

Przykładowa topologia używana w tym dokumencie opiera się na składnikach, które są dołączone do burzy w usłudze HDInsight.The example topology used in this document relies on components that are included with Storm on HDInsight. Może wymagać modyfikacji do pracy z Azure Data Lake Storage, gdy jest używany z innymi klastrami Apache Storm.It may require modification to work with Azure Data Lake Storage when used with other Apache Storm clusters.

Ten samouczek zawiera informacje na temat wykonywania następujących czynności:In this tutorial, you learn how to:

  • Konfigurowanie klastra z akcją skryptuConfigure the cluster with script action
  • Kompilowanie i pakowanie topologiiBuild and package the topology
  • Wdrażanie i uruchamianie topologiiDeploy and run the topology
  • Wyświetlanie danych wyjściowychView output data
  • Zatrzymywanie topologiiStop the topology

Wymagania wstępnePrerequisites

Przykładowa konfiguracjaExample configuration

Następujący YAML jest fragmentem pliku resources/writetohdfs.yaml zawartego w przykładzie.The following YAML is an excerpt from the resources/writetohdfs.yaml file included in the example. Ten plik definiuje topologię burzy przy użyciu struktury strumienia dla 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"]

Ta YAML definiuje następujące elementy:This YAML defines the following items:

  • syncPolicy: określa, kiedy pliki są synchronizowane/opróżniane do systemu plików.syncPolicy: Defines when files are synched/flushed to the file system. W tym przykładzie każde 1000 krotek.In this example, every 1000 tuples.
  • fileNameFormat: Określa ścieżkę i wzorzec nazwy pliku, który ma być używany podczas pisania plików.fileNameFormat: Defines the path and file name pattern to use when writing files. W tym przykładzie ścieżka jest zapewniana w czasie wykonywania przy użyciu filtru, a rozszerzenie pliku jest .txt.In this example, the path is provided at runtime using a filter, and the file extension is .txt.
  • recordFormat: określa wewnętrzny format zapisanych plików.recordFormat: Defines the internal format of the files written. W tym przykładzie pola są rozdzielane znakami |.In this example, fields are delimited by the | character.
  • rotationPolicy: określa, kiedy obracać pliki.rotationPolicy: Defines when to rotate files. W tym przykładzie nie jest przeprowadzane obracanie.In this example, no rotation is performed.
  • hdfs-bolt: używa poprzednich składników jako parametrów konfiguracji dla klasy HdfsBolt.hdfs-bolt: Uses the previous components as configuration parameters for the HdfsBolt class.

Aby uzyskać więcej informacji na temat struktury strumienia, zobacz https://storm.apache.org/releases/current/flux.html.For more information on the Flux framework, see https://storm.apache.org/releases/current/flux.html.

Konfigurowanie klastraConfigure the cluster

Domyślnie burza w usłudze HDInsight nie obejmuje składników, których HdfsBolt używa do komunikacji z usługą Azure Storage lub Data Lake Storage w ścieżce klas burzy.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. Użyj następującej akcji skryptu, aby dodać te składniki do katalogu extlib na potrzeby burzy w klastrze:Use the following script action to add these components to the extlib directory for Storm on your cluster:

WłaściwośćProperty WartośćValue
Typ skryptuScript type -Niestandardowe- Custom
Identyfikator URI skryptu bashBash script URI https://hdiconfigactions.blob.core.windows.net/linuxstormextlibv01/stormextlib.sh
Typy węzłówNode type(s) Nimbus, NadzorcaNimbus, Supervisor
ParametryParameters BrakNone

Aby uzyskać informacje na temat używania tego skryptu z klastrem, zobacz Dostosowywanie klastrów usługi HDInsight za pomocą dokumentu akcje skryptu .For information on using this script with your cluster, see the Customize HDInsight clusters using script actions document.

Kompilowanie i pakowanie topologiiBuild and package the topology

  1. Pobierz przykładowy projekt z https://github.com/Azure-Samples/hdinsight-storm-azure-data-lake-store do środowiska deweloperskiego.Download the example project from https://github.com/Azure-Samples/hdinsight-storm-azure-data-lake-store to your development environment.

  2. W wierszu polecenia, terminalu lub sesji powłoki zmień katalogi na katalog główny pobranego projektu.From a command prompt, terminal, or shell session, change directories to the root of the downloaded project. Aby skompilować i utworzyć pakiet topologii, użyj następującego polecenia:To build and package the topology, use the following command:

    mvn compile package
    

    Po zakończeniu kompilacji i pakowania istnieje nowy katalog o nazwie target, który zawiera plik o nazwie StormToHdfs-1.0-SNAPSHOT.jar.Once the build and packaging completes, there is a new directory named target, that contains a file named StormToHdfs-1.0-SNAPSHOT.jar. Ten plik zawiera skompilowaną topologię.This file contains the compiled topology.

Wdrażanie i uruchamianie topologiiDeploy and run the topology

  1. Użyj następującego polecenia, aby skopiować topologię do klastra usługi HDInsight.Use the following command to copy the topology to the HDInsight cluster. Zastąp CLUSTERNAME nazwą klastra.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. Po zakończeniu przekazywania Użyj następującego polecenia, aby nawiązać połączenie z klastrem usługi HDInsight przy użyciu protokołu SSH.Once the upload completes, use the following to connect to the HDInsight cluster using SSH. Zastąp CLUSTERNAME nazwą klastra.Replace CLUSTERNAME with the name of the cluster.

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  3. Po nawiązaniu połączenia użyj następującego polecenia, aby utworzyć plik o nazwie dev.properties:Once connected, use the following command to create a file named dev.properties:

    nano dev.properties
    
  4. Użyj następującego tekstu jako zawartości pliku dev.properties.Use the following text as the contents of the dev.properties file. Popraw miarę potrzeb w zależności od schematu identyfikatora URI.Revise as needed based on your URI scheme.

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

    Aby zapisać plik, użyj kombinacji klawiszy Ctrl + X, a następnie __Y__i klawisza ENTER.To save the file, use Ctrl + X, then Y, and finally Enter. Wartości w tym pliku ustawiają adres URL magazynu i nazwę katalogu, w którym są zapisywane dane.The values in this file set the storage URL and the directory name that data is written to.

  5. Użyj następującego polecenia, aby uruchomić topologię: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
    

    To polecenie uruchamia topologię przy użyciu platformy strumieni przez przesłanie jej do węzła Nimbus klastra.This command starts the topology using the Flux framework by submitting it to the Nimbus node of the cluster. Topologia jest definiowana przez plik writetohdfs.yaml znajdujący się w pliku JAR.The topology is defined by the writetohdfs.yaml file included in the jar. Plik dev.properties jest przenoszona jako filtr, a wartości zawarte w pliku są odczytywane przez topologię.The dev.properties file is passed as a filter, and the values contained in the file are read by the topology.

Wyświetlanie danych wyjściowychView output data

Aby wyświetlić dane, użyj następującego polecenia:To view the data, use the following command:

hdfs dfs -ls /stormdata/

Zostanie wyświetlona lista plików utworzonych przez tę topologię.A list of the files created by this topology is displayed. Poniższa lista stanowi przykład danych zwracanych przez poprzednie polecenia: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

Zatrzymywanie topologiiStop the topology

Topologie burzy są uruchamiane do czasu zatrzymania lub klaster zostanie usunięty.Storm topologies run until stopped, or the cluster is deleted. Aby zatrzymać topologię, użyj następującego polecenia:To stop the topology, use the following command:

storm kill hdfswriter

Oczyszczanie zasobówClean up resources

Aby wyczyścić zasoby utworzone w tym samouczku, możesz usunąć grupę zasobów.To clean up the resources created by this tutorial, you can delete the resource group. Usunięcie grupy zasobów powoduje również usunięcie skojarzonego klastra usługi HDInsight i wszystkich innych zasobów skojarzonych z tą grupą zasobów.Deleting the resource group also deletes the associated HDInsight cluster, and any other resources associated with the resource group.

Aby usunąć grupę zasobów za pomocą witryny Azure Portal:To remove the resource group using the Azure portal:

  1. W witrynie Azure Portal rozwiń menu po lewej stronie, aby otworzyć menu usług, a następnie wybierz pozycję Grupy zasobów, aby wyświetlić listę grup zasobów.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. Znajdź grupę zasobów do usunięcia, a następnie kliknij prawym przyciskiem myszy przycisk Więcej (...) po prawej stronie listy.Locate the resource group to delete, and then right-click the More button (...) on the right side of the listing.
  3. Wybierz pozycję Usuń grupę zasobów i potwierdź.Select Delete resource group, and then confirm.

Następne krokiNext steps

W ramach tego samouczka nauczysz się używać Apache Storm do zapisywania danych do magazynu zgodnego z systemem plików HDFS używanego przez Apache Storm w usłudze HDInsight.In this tutorial, you learned how to use Apache Storm to write data to the HDFS-compatible storage used by Apache Storm on HDInsight.