Zápis do Apache Hadoop HDFS z Apache Storm v HDInsightWrite to Apache Hadoop HDFS from Apache Storm on HDInsight

Další informace o použití Apache Storm zapsat data do HDFS kompatibilního úložiště využitá službou Apache Storm v HDInsight.Learn how to use Apache Storm to write data to the HDFS-compatible storage used by Apache Storm on HDInsight. HDInsight, můžete použít jako HDFS kompatibilního úložiště Azure Storage a Azure Data Lake Storage.HDInsight can use both Azure Storage and Azure Data Lake Storage as HDFS-compatible storage. Storm poskytuje HdfsBolt komponenta, která zapisuje data do rozhraní HDFS.Storm provides an HdfsBolt component that writes data to HDFS. Tento dokument obsahuje informace o zápisu do obou typů úložiště z HdfsBolt.This document provides information on writing to either type of storage from the HdfsBolt.

Důležité

Topologii příkladu v tomto dokumentu se spoléhá na součásti, které jsou součástí Storm v HDInsight.The example topology used in this document relies on components that are included with Storm on HDInsight. Může vyžadovat změny pro práci s Azure Data Lake Storage při použití s další clustery Apache Storm.It may require modification to work with Azure Data Lake Storage when used with other Apache Storm clusters.

Získání kóduGet the code

Projekt, který obsahuje tato topologie je k dispozici ke stažení z https://github.com/Azure-Samples/hdinsight-storm-azure-data-lake-store .The project containing this topology is available as a download from https://github.com/Azure-Samples/hdinsight-storm-azure-data-lake-store.

Pro kompilaci tohoto projektu, potřebujete následující konfigurace pro vývojové prostředí:To compile this project, you need the following configuration for your development environment:

Když na svoji vývojářskou pracovní stanici nainstalujete Javu a JDK, mohou být nastaveny následující proměnné prostředí.The following environment variables may be set when you install Java and the JDK on your development workstation. Nicméně byste měli zkontrolovat, že existují a že obsahují hodnoty správné pro váš systém.However, you should check that they exist and that they contain the correct values for your system.

  • JAVA_HOME – instalační adresář sady JDK.JAVA_HOME - should point to the directory where the JDK is installed.

  • PATH – měla by obsahovat následující cesty:PATH - should contain the following paths:

    • JAVA_HOME (nebo odpovídající cestu).JAVA_HOME (or the equivalent path).
    • JAVA_HOME\bin (nebo odpovídající cestu).JAVA_HOME\bin (or the equivalent path).
    • Adresář, kde je nainstalovaný Maven.The directory where Maven is installed.

Jak používat HdfsBolt s HDInsightHow to use the HdfsBolt with HDInsight

Důležité

Před použitím HdfsBolt se Stormem v HDInsight, musíte nejprve použít akci skriptu ke kopírování souborů vyžaduje soubor jar do extpath pro Storm.Before using the HdfsBolt with Storm on HDInsight, you must first use a script action to copy required jar files into the extpath for Storm. Další informace najdete v části konfigurace clusteru oddíl.For more information, see the Configure the cluster section.

HdfsBolt používá schéma souboru, které poskytují návod k zápisu do rozhraní HDFS.The HdfsBolt uses the file scheme that you provide to understand how to write to HDFS. S HDInsight použijte jednu z následujících schémat:With HDInsight, use one of the following schemes:

  • wasb://: Použít s účtem Azure Storage.wasb://: Used with an Azure Storage account.
  • abfs://: Používá se Azure Data Lake Storage Gen2.abfs://: Used with an Azure Data Lake Storage Gen2.
  • adl://: Použít s Azure Data Lake Storage Gen1.adl://: Used with Azure Data Lake Storage Gen1.

Následující tabulka obsahuje příklady použití souboru schématu pro různé scénáře:The following table provides examples of using the file scheme for different scenarios:

SchémaScheme PoznámkyNotes
wasb:/// Výchozí účet úložiště je kontejner objektů blob v účtu služby Azure StorageThe default storage account is a blob container in an Azure Storage account
abfs:/// Výchozí účet úložiště je adresář v účtu služby Azure Data Lake Storage Gen2The default storage account is a directory in an Azure Data Lake Storage Gen2 account
adl:/// Výchozí účet úložiště je adresář v Azure Data Lake Storage Gen1.The default storage account is a directory in Azure Data Lake Storage Gen1. Při vytváření clusteru zadejte adresář, v Data Lake Storage, která je kořenem clusteru HDFS.During cluster creation, you specify the directory in Data Lake Storage that is the root of the cluster's HDFS. Například /clusters/myclustername/ adresáře.For example, the /clusters/myclustername/ directory.
wasb://CONTAINER@ACCOUNT.blob.core.windows.net/ Účet úložiště Azure (Další) jiné než výchozí, přidružené ke clusteru.A non-default (additional) Azure storage account associated with the cluster.
abfs://CONTAINER@ACCOUNT.dfs.core.windows.net/ Účet úložiště Azure (Další) jiné než výchozí, přidružené ke clusteru.A non-default (additional) Azure storage account associated with the cluster.
adl://STORENAME/ Kořenový adresář Data Lake Storage používané clusterem.The root of Data Lake Storage used by the cluster. Toto schéma umožňuje přístup k datům, která se nachází mimo adresář, který obsahuje systém souborů clusteru.This scheme allows you to access data that is located outside the directory that contains the cluster file system.

Další informace najdete v tématu HdfsBolt odkaz na webu Apache.org.For more information, see the HdfsBolt reference at Apache.org.

Příklad konfiguraceExample configuration

Následující kód YAML je výňatkem z resources/writetohdfs.yaml souboru zahrnutém v příkladu.The following YAML is an excerpt from the resources/writetohdfs.yaml file included in the example. Tento soubor definuje pomocí topologie Storm tok rámec pro 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"]

Tato YAML definuje následující položky:This YAML defines the following items:

  • syncPolicy: Definuje, kdy jsou soubory synchronizovat/vyprázdní do systému souborů.syncPolicy: Defines when files are synched/flushed to the file system. V tomto příkladu každých 1000 řazené kolekce členů.In this example, every 1000 tuples.
  • fileNameFormat: Definuje vzor název a cesta k souboru pro použití při zapisování souborů.fileNameFormat: Defines the path and file name pattern to use when writing files. V tomto příkladu je cesta k dispozici za běhu pomocí filtru a přípona souboru je .txt.In this example, the path is provided at runtime using a filter, and the file extension is .txt.
  • recordFormat: Definuje interní formát soubory zapsané.recordFormat: Defines the internal format of the files written. V tomto příkladu jsou odděleny pole | znak.In this example, fields are delimited by the | character.
  • rotationPolicy: Definuje, kdy se otočí soubory.rotationPolicy: Defines when to rotate files. V tomto příkladu se provádí bez otočení.In this example, no rotation is performed.
  • hdfs-bolt: Používá jako parametry konfigurace pro předchozí komponenty HdfsBolt třídy.hdfs-bolt: Uses the previous components as configuration parameters for the HdfsBolt class.

Další informace o rozhraní tok, najdete v části https://storm.apache.org/releases/current/flux.html .For more information on the Flux framework, see https://storm.apache.org/releases/current/flux.html.

Konfigurace clusteruConfigure the cluster

Storm v HDInsight ve výchozím nastavení, neobsahuje součásti, které HdfsBolt používá ke komunikaci s Azure Storage nebo Azure Data Lake Storage v cestě pro 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. Použijte následující akci skriptu pro přidání těchto komponent k extlib adresáře pro Storm v clusteru:Use the following script action to add these components to the extlib directory for Storm on your cluster:

  • Identifikátor URI skriptu: https://hdiconfigactions.blob.core.windows.net/linuxstormextlibv01/stormextlib.shScript URI: https://hdiconfigactions.blob.core.windows.net/linuxstormextlibv01/stormextlib.sh
  • Uzly platí pro: Nimbus, správceNodes to apply to: Nimbus, Supervisor
  • Parametry: ŽádnýParameters: None

Informace o použití tohoto skriptu s vaším clusterem, najdete v článku HDInsight přizpůsobit clustery pomocí akcí skriptů dokumentu.For information on using this script with your cluster, see the Customize HDInsight clusters using script actions document.

Sestavení a zabalení topologieBuild and package the topology

  1. Stáhnout příklad projektu ze https://github.com/Azure-Samples/hdinsight-storm-azure-data-lake-store do svého vývojového prostředí.Download the example project from https://github.com/Azure-Samples/hdinsight-storm-azure-data-lake-store to your development environment.

  2. Z příkazového řádku, terminálu nebo skořápce relace změnit adresáře do kořenového adresáře ze staženého projektu.From a command prompt, terminal, or shell session, change directories to the root of the downloaded project. Pokud chcete sestavit a zabalit topologii, použijte následující příkaz:To build and package the topology, use the following command:

     mvn compile package
    

    Po dokončení sestavení a zabalení je nový adresář s názvem target, který bude obsahovat soubor s názvem 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. Tento soubor obsahuje zkompilovaný topologie.This file contains the compiled topology.

Nasadit a spustit topologiiDeploy and run the topology

  1. Použijte následující příkaz pro kopírování topologie do clusteru HDInsight.Use the following command to copy the topology to the HDInsight cluster. Nahraďte uživatele s uživatelským jménem SSH jste použili při vytváření clusteru.Replace USER with the SSH user name you used when creating the cluster. Místo CLUSTERNAME zadejte název vašeho clusteru.Replace CLUSTERNAME with the name of the cluster.

     scp target\StormToHdfs-1.0-SNAPSHOT.jar USER@CLUSTERNAME-ssh.azurehdinsight.net:StormToHdfs-1.0-SNAPSHOT.jar
    

    Po zobrazení výzvy zadejte heslo použité při vytváření uživatele SSH pro cluster.When prompted, enter the password used when creating the SSH user for the cluster. Pokud jste použili veřejný klíč, místo hesla, budete možná muset použít -i parametr zadejte cestu k odpovídající privátní klíč.If you used a public key instead of a password, you may need to use the -i parameter to specify the path to the matching private key.

    Poznámka

    Další informace o použití scp se službou HDInsight najdete v tématu Použití SSH se službou HDInsight.For more information on using scp with HDInsight, see Use SSH with HDInsight.

  2. Po dokončení nahrávání, použijte následující postup pro připojení ke clusteru HDInsight pomocí SSH.Once the upload completes, use the following to connect to the HDInsight cluster using SSH. Nahraďte uživatele s uživatelským jménem SSH jste použili při vytváření clusteru.Replace USER with the SSH user name you used when creating the cluster. Místo CLUSTERNAME zadejte název vašeho clusteru.Replace CLUSTERNAME with the name of the cluster.

     ssh USER@CLUSTERNAME-ssh.azurehdinsight.net
    

    Po zobrazení výzvy zadejte heslo použité při vytváření uživatele SSH pro cluster.When prompted, enter the password used when creating the SSH user for the cluster. Pokud jste použili veřejný klíč, místo hesla, budete možná muset použít -i parametr zadejte cestu k odpovídající privátní klíč.If you used a public key instead of a password, you may need to use the -i parameter to specify the path to the matching private key.

    Další informace najdete v tématu Použití SSH se službou HDInsight.For more information, see Use SSH with HDInsight.

  3. Jakmile budete připojeni, použijte následující příkaz k vytvoření souboru s názvem dev.properties:Once connected, use the following command to create a file named dev.properties:

     nano dev.properties
    
  4. Použijte následující text jako obsah dev.properties souboru:Use the following text as the contents of the dev.properties file:

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

    Důležité

    Tento příklad předpokládá, že váš cluster používá účet Azure Storage jako výchozí úložiště.This example assumes that your cluster uses an Azure Storage account as the default storage. Pokud váš cluster používá Azure Data Lake Storage Gen2, použijte hdfs.url: abfs:/// místo.If your cluster uses Azure Data Lake Storage Gen2, use hdfs.url: abfs:/// instead. Pokud váš cluster používá Azure Data Lake Storage Gen1, použijte hdfs.url: adl:/// místo.If your cluster uses Azure Data Lake Storage Gen1, use hdfs.url: adl:/// instead.

    Chcete-li uložit soubor, použijte Ctrl + X, pak __Y__a nakonec Enter.To save the file, use Ctrl + X, then Y, and finally Enter. Hodnoty v tomto souboru nastavit adresu URL úložiště Data Lake a název adresáře, který data se zapisují do.The values in this file set the Data Lake Storage URL and the directory name that data is written to.

  5. Spustit topologii použijte následující příkaz: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
    

    Tento příkaz spustí topologii s použitím rozhraní tok odesláním do uzlu Nimbus clusteru.This command starts the topology using the Flux framework by submitting it to the Nimbus node of the cluster. Topologie je definován writetohdfs.yaml soubor součástí soubor jar.The topology is defined by the writetohdfs.yaml file included in the jar. dev.properties Souboru je předán jako filtr a hodnoty obsažené v souboru jsou přečteny topologie.The dev.properties file is passed as a filter, and the values contained in the file are read by the topology.

Zobrazení výstupní dataView output data

Chcete-li zobrazit data, použijte následující příkaz:To view the data, use the following command:

hdfs dfs -ls /stormdata/

Zobrazí se seznam soubory vytvořené v této topologii.A list of the files created by this topology is displayed.

V následujícím seznamu je příkladem dat vrácených z předchozích příkazů:The following list is an example of the data returned by the previous commands:

Found 30 items
-rw-r-----+  1 sshuser sshuser       488000 2017-03-03 19:13 /stormdata/hdfs-bolt-3-0-1488568403092.txt
-rw-r-----+  1 sshuser sshuser       444000 2017-03-03 19:13 /stormdata/hdfs-bolt-3-1-1488568404567.txt
-rw-r-----+  1 sshuser sshuser       502000 2017-03-03 19:13 /stormdata/hdfs-bolt-3-10-1488568408678.txt
-rw-r-----+  1 sshuser sshuser       582000 2017-03-03 19:13 /stormdata/hdfs-bolt-3-11-1488568411636.txt
-rw-r-----+  1 sshuser sshuser       464000 2017-03-03 19:13 /stormdata/hdfs-bolt-3-12-1488568411884.txt

Zastavení topologieStop the topology

Topologie Storm běží až do ukončení nebo odstranění clusteru.Storm topologies run until stopped, or the cluster is deleted. Pokud chcete ukončit topologii, použijte následující příkaz:To stop the topology, use the following command:

storm kill hdfswriter

Odstranit clusterDelete your cluster

Varování

Za clustery HDInsight se fakturuje za minutu, ať už používáte je nebo není.Billing for HDInsight clusters is prorated per minute, whether you use them or not. Nezapomeňte odstranit cluster po dokončení jeho použití.Be sure to delete your cluster after you finish using it. Zobrazit odstranění clusteru služby HDInsight.See how to delete an HDInsight cluster.

Další postupNext steps

Teď, když jste se naučili, jak používat systém Apache Storm k zápisu do služby Azure Storage a Azure Data Lake Storage, zjistit další příklady Apache Storm pro HDInsight.Now that you have learned how to use Apache Storm to write to Azure Storage and Azure Data Lake Storage, discover other Apache Storm examples for HDInsight.

Další informace najdete v tématechSee also