チュートリアル:Azure HDInsight 上の Apache Storm から Apache Hadoop HDFS に書き込むTutorial: Write to Apache Hadoop HDFS from Apache Storm on Azure HDInsight

Apache Storm を使用して、HDInsight 上の Apache Storm によって使用される HDFS と互換性のあるストレージにデータを書き込む方法について説明します。This tutorial demonstrates how to use Apache Storm to write data to the HDFS-compatible storage used by Apache Storm on HDInsight. HDInsight では、HDFS と互換性のあるストレージとして Azure Storage と Azure Data Lake Storage の両方を使用できます。HDInsight can use both Azure Storage and Azure Data Lake Storage as HDFS-compatible storage. Storm は、HDFS にデータを書き込む HdfsBolt コンポーネントを提供します。Storm provides an HdfsBolt component that writes data to HDFS. このドキュメントでは、HdfsBolt から両方の種類のストレージへの書き込みに関する情報を提供します。This document provides information on writing to either type of storage from the HdfsBolt.

このドキュメントで使用されているトポロジの例は、HDInsight 上の Storm に含まれているコンポーネントによって異なります。The example topology used in this document relies on components that are included with Storm on HDInsight. 他の Apache Storm クラスターと共に使用された場合、Azure Data Lake Storage で動作するには、変更が必要になる可能性があります。It may require modification to work with Azure Data Lake Storage when used with other Apache Storm clusters.

このチュートリアルでは、以下の内容を学習します。In this tutorial, you learn how to:

  • スクリプト アクションを使ってクラスターを構成するConfigure the cluster with script action
  • トポロジをビルドおよびパッケージ化するBuild and package the topology
  • トポロジをデプロイおよび実行するDeploy and run the topology
  • 出力データを表示するView output data
  • トポロジを停止するStop the topology

前提条件Prerequisites

構成の例Example configuration

次の YAML は、この例に含まれている resources/writetohdfs.yaml ファイルからの抜粋です。The following YAML is an excerpt from the resources/writetohdfs.yaml file included in the example. このファイルは、Apache Storm の Flux フレームワークを使用して 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"]

この YAML は、次の項目を定義します。This YAML defines the following items:

  • syncPolicy:ファイルがファイル システムにいつ同期/フラッシュされるかを定義します。syncPolicy: Defines when files are synched/flushed to the file system. この例では、1000 組ごとです。In this example, every 1000 tuples.
  • fileNameFormat:ファイルを書き込むときに使用するパスとファイル名のパターンを定義します。fileNameFormat: Defines the path and file name pattern to use when writing files. この例では、パスはフィルターを使用して実行時に指定され、ファイル拡張子は .txt です。In this example, the path is provided at runtime using a filter, and the file extension is .txt.
  • recordFormat:書き込まれるファイルの内部形式を定義します。recordFormat: Defines the internal format of the files written. この例では、フィールドは | 文字で区切られます。In this example, fields are delimited by the | character.
  • rotationPolicy:ファイルをいつローテーションするかを定義します。rotationPolicy: Defines when to rotate files. この例では、ローテーションは実行されません。In this example, no rotation is performed.
  • hdfs-bolt:前のコンポーネントを HdfsBolt クラスの構成パラメーターとして使用します。hdfs-bolt: Uses the previous components as configuration parameters for the HdfsBolt class.

Flux フレームワークの詳細については、「https://storm.apache.org/releases/current/flux.html」を参照してください。For more information on the Flux framework, see https://storm.apache.org/releases/current/flux.html.

クラスターを構成するConfigure the cluster

既定では、HDInsight 上の Storm には、HdfsBolt が Storm のクラスパス内の Azure Storage または Data Lake Storage と通信するために使用するコンポーネントは含まれていません。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. これらのコンポーネントをクラスター上の Storm 用の extlib ディレクトリに追加するには、次のスクリプト アクションを使用します。Use the following script action to add these components to the extlib directory for Storm on your cluster:

プロパティProperty Value
スクリプトの種類Script type - Custom- Custom
Bash スクリプト URIBash script URI https://hdiconfigactions.blob.core.windows.net/linuxstormextlibv01/stormextlib.sh
ノードの種類Node type(s) Nimbus、SupervisorNimbus, Supervisor
parametersParameters なしNone

このスクリプトのクラスターでの使用については、「スクリプト アクションを使用して HDInsight クラスターをカスタマイズする」のドキュメントを参照してください。For information on using this script with your cluster, see the Customize HDInsight clusters using script actions document.

トポロジをビルドおよびパッケージ化するBuild and package the topology

  1. サンプル プロジェクトを https://github.com/Azure-Samples/hdinsight-storm-azure-data-lake-store から開発環境にダウンロードします。Download the example project from https://github.com/Azure-Samples/hdinsight-storm-azure-data-lake-store to your development environment.

  2. コマンド プロンプト、ターミナル、またはシェル セッションから、ダウンロードされたプロジェクトのルートにディレクトリを変更します。From a command prompt, terminal, or shell session, change directories to the root of the downloaded project. トポロジを構築およびパッケージ化するには、次のコマンドを使用します。To build and package the topology, use the following command:

    mvn compile package
    

    構築およびパッケージ化が完了すると、target という名前の新しいディレクトリが存在し、そこには 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. このファイルには、コンパイルされたトポロジが含まれています。This file contains the compiled topology.

トポロジをデプロイおよび実行するDeploy and run the topology

  1. 次のコマンドを使用して、トポロジを HDInsight クラスターにコピーします。Use the following command to copy the topology to the HDInsight cluster. CLUSTERNAME をクラスターの名前に置き換えます。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. アップロードが完了したら、次のようにして、SSH を使用して HDInsight クラスターに接続します。Once the upload completes, use the following to connect to the HDInsight cluster using SSH. CLUSTERNAME をクラスターの名前に置き換えます。Replace CLUSTERNAME with the name of the cluster.

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  3. 接続したら、次のコマンドを使用して dev.properties という名前のファイルを作成します。Once connected, use the following command to create a file named dev.properties:

    nano dev.properties
    
  4. dev.properties ファイルの内容として、次のテキストを使用します。Use the following text as the contents of the dev.properties file. URI スキームに基づいて必要に応じて修正してください。Revise as needed based on your URI scheme.

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

    ファイルを保存するには、Ctrl + X キーを押してから Y キー、Enter キーの順に押します。To save the file, use Ctrl + X, then Y, and finally Enter. このファイル内の値により、ストレージの URL と、データが書き込まれるディレクトリ名が設定されます。The values in this file set the storage URL and the directory name that data is written to.

  5. 次のコマンドを使用して、トポロジを開始します。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
    

    このコマンドは、トポロジをクラスターの Nimbus ノードに送信することによって、Flux フレームワークを使用してトポロジを開始します。This command starts the topology using the Flux framework by submitting it to the Nimbus node of the cluster. トポロジは jar に含まれる writetohdfs.yaml ファイルによって定義されます。The topology is defined by the writetohdfs.yaml file included in the jar. dev.properties ファイルはフィルターとして渡され、ファイルに含まれる値がトポロジによって読み取られます。The dev.properties file is passed as a filter, and the values contained in the file are read by the topology.

出力データを表示するView output data

データを表示するには、次のコマンドを使用します。To view the data, use the following command:

hdfs dfs -ls /stormdata/

このトポロジによって作成されたファイルの一覧が表示されます。A list of the files created by this topology is displayed. 次の一覧は、上記のコマンドによって返されるデータの例です。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

トポロジを停止するStop the topology

Storm トポロジは、停止されるか、またはクラスターが削除されるまで実行されます。Storm topologies run until stopped, or the cluster is deleted. トポロジを停止するには、次のコマンドを使用します。To stop the topology, use the following command:

storm kill hdfswriter

リソースのクリーンアップClean up resources

このチュートリアルで作成したリソースをクリーンアップするために、リソース グループを削除することができます。To clean up the resources created by this tutorial, you can delete the resource group. リソース グループを削除すると、関連付けられている HDInsight クラスター、およびリソース グループに関連付けられているその他のリソースも削除されます。Deleting the resource group also deletes the associated HDInsight cluster, and any other resources associated with the resource group.

Azure Portal を使用してリソース グループを削除するには:To remove the resource group using the Azure portal:

  1. Azure Portal で左側のメニューを展開してサービスのメニューを開き、 [リソース グループ] を選択して、リソース グループの一覧を表示します。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. 削除するリソース グループを見つけて、一覧の右側にある [詳細] ボタン ([...]) を右クリックします。Locate the resource group to delete, and then right-click the More button (...) on the right side of the listing.
  3. [リソース グループの削除] を選択し、確認します。Select Delete resource group, and then confirm.

次の手順Next steps

このチュートリアルでは、Apache Storm を使用して、HDInsight 上の Apache Storm によって使用される HDFS と互換性のあるストレージにデータを書き込む方法について説明します。In this tutorial, you learned how to use Apache Storm to write data to the HDFS-compatible storage used by Apache Storm on HDInsight.