Azure HDInsight での Apache Storm とはWhat is Apache Storm on Azure HDInsight?

Apache Storm は、分散型でフォールト トレランスに優れたオープンソースの計算システムです。Apache Storm is a distributed, fault-tolerant, open-source computation system. Storm を使用すると、Hadoop によってデータ ストリームをリアルタイムで処理できます。You can use Storm to process streams of data in real time with Hadoop. また、Storm のソリューションは、最初に正常に処理されなかったデータを再生する機能を備え、保証されたデータ処理を実現します。Storm solutions can also provide guaranteed processing of data, with the ability to replay data that was not successfully processed the first time.

HDInsight で Apache Storm を使用する理由Why use Storm on HDInsight?

HDInsight における Storm の機能は次のとおりです。Storm on HDInsight provides the following features:

  • Storm のアップタイムに関して 99% のサービス レベル アグリーメント (SLA): 詳細については、HDInsight の SLA 情報に関するドキュメントを参照してください。99% Service Level Agreement (SLA) on Storm uptime: For more information, see the SLA information for HDInsight document.

  • 作成中や作成後の Storm クラスターに対してスクリプトを実行することで、簡単にカスタマイズできます。Supports easy customization by running scripts against a Storm cluster during or after creation. 詳細については、スクリプト アクションを使った HDInsight クラスターのカスタマイズに関する記事を参照してください。For more information, see Customize HDInsight clusters using script action.

  • さまざまな言語でソリューションを作成: Storm コンポーネントは、Java、C#、Python など、さまざまな言語で作成することができます。Create solutions in multiple languages: You can write Storm components in the language of your choice, such as Java, C#, and Python.

    • C# トポロジの開発、管理、監視を目的として、Visual Studio と HDInsight を連携させることができます。Integrates Visual Studio with HDInsight for the development, management, and monitoring of C# topologies. 詳細については、HDInsight Tools for Visual Studio を使用した C# Storm トポロジの開発に関する記事を参照してください。For more information, see Develop C# Storm topologies with the HDInsight Tools for Visual Studio.

    • Trident Java インターフェイスをサポートします。Supports the Trident Java interface. メッセージの厳密に 1 回の処理、トランザクションのデータストア永続化、一般的なストリーム分析操作のセットをサポートする Storm トポロジの作成が可能になります。You can create Storm topologies that support exactly once processing of messages, transactional datastore persistence, and a set of common stream analytics operations.

  • 動的スケーリング: Storm トポロジの実行に影響を与えることなく、worker ノードを追加または削除することができます。Dynamic scaling: You can add or remove worker nodes with no impact to running Storm topologies.

    注意

    スケーリング操作を通じて追加された新しいノードを利用するためには、実行中のトポロジを非アクティブ化したり再アクティブ化したりする必要があります。You must deactivate and reactivate running topologies to take advantage of new nodes added through scaling operations.

  • さまざまな Azure サービスを使ってストリーミング パイプラインを作成: HDInsight の Storm は、Event Hubs、SQL Database、Azure Storage、Azure Data Lake Store など、他の Azure サービスと連携します。Create streaming pipelines using multiple Azure services: Storm on HDInsight integrates with other Azure services such as Event Hubs, SQL Database, Azure Storage, and Azure Data Lake Store.

    Azure サービスと連携するソリューションの例については、HDInsight の Storm を使用して Event Hubs からのイベントを処理する方法に関するページを参照してください。For an example solution that integrates with Azure services, see Process events from Event Hubs with Storm on HDInsight.

リアルタイム分析ソリューションに Apache Storm を利用している企業の一覧については、Apache Storm を使用している企業に関するページを参照してください。For a list of companies that are using Apache Storm for their real-time analytics solutions, see Companies using Apache Storm.

Storm の使用方法については、HDInsight での Storm の使用に関する記事を参照してください。To get started using Storm, see Get started with Storm on HDInsight.

Storm のしくみHow does Storm work

Storm では、一般的な MapReduce ジョブではなく、トポロジを実行します。Storm runs topologies instead of the MapReduce jobs that you might be familiar with. Storm トポロジは、有向非巡回グラフ (DAG) に配置された複数のコンポーネントで構成されます。Storm topologies are composed of multiple components that are arranged in a directed acyclic graph (DAG). データはグラフ内のコンポーネント間を流れます。Data flows between the components in the graph. 各コンポーネントでは 1 つ以上のデータ ストリームを使用し、必要に応じて 1 つ以上のストリームを出力できます。Each component consumes one or more data streams, and can optionally emit one or more streams. 次の図は、基本的なワード カウント トポロジ内のコンポーネント間でデータがどのように流れるかを示しています。The following diagram illustrates how data flows between components in a basic word-count topology:

Storm トポロジでのコンポーネントの配置の例

  • スパウト コンポーネントは、データをトポロジに取り込みます。Spout components bring data into a topology. 1 つ以上のストリームをこのトポロジに出力します。They emit one or more streams into the topology.

  • ボルト コンポーネントは、スパウトまたはその他のボルトから出力されたストリームを使用します。Bolt components consume streams emitted from spouts or other bolts. ボルトは、必要に応じてストリームをトポロジに出力できます。Bolts might optionally emit streams into the topology. また、HDFS、Kafka、HBase などの外部サービスまたはストレージへのデータの書き込みも行います。Bolts are also responsible for writing data to external services or storage, such as HDFS, Kafka, or HBase.

信頼性Reliability

Apache Storm では、データ分析が多数のノードにまたがる場合でも、各受信メッセージが必ず完全に処理されることを保証しています。Apache Storm guarantees that each incoming message is always fully processed, even when the data analysis is spread over hundreds of nodes.

Nimbus ノードは Hadoop JobTracker に同様の機能を提供し、Zookeeper を介して、タスクをクラスターの他のノードに割り当てます。The Nimbus node provides functionality similar to the Hadoop JobTracker, and it assigns tasks to other nodes in a cluster through Zookeeper. Zookeeper ノードは、クラスターに調整を提供し、Nimbus と worker ノードの Supervisor 処理間の通信を容易にします。Zookeeper nodes provide coordination for a cluster and facilitate communication between Nimbus and the Supervisor process on the worker nodes. 処理中のノードの 1 つがダウンした場合、Nimbus ノードに通知され、タスクと関連付けられているデータが別のノードに割り当てられます。If one processing node goes down, the Nimbus node is informed, and it assigns the task and associated data to another node.

Apache Storm クラスターの既定の構成では、Nimbus ノードは 1 つだけです。The default configuration for Apache Storm clusters is to have only one Nimbus node. HDInsight の Storm では、2 つの Nimbus ノードが提供されます。Storm on HDInsight provides two Nimbus nodes. プライマリ ノードで障害が発生すると、Storm クラスターはプライマリ ノードの復旧中にセカンダリ ノードに切り替わります。If the primary node fails, the Storm cluster switches to the secondary node while the primary node is recovered. 次の図は、HDInsight 上の Storm に使用されるタスク フローの構成を示しています。The following diagram illustrates the task flow configuration for Storm on HDInsight:

Nimbus、Zookeeper、スーパーバイザのダイアグラム

作成のしやすさEase of creation

HDInsight 上に新しい Storm クラスターを数分で作成できます。You can create a new Storm cluster on HDInsight in minutes. Storm クラスターの作成の詳細については、HDInsight での Storm の使用に関する記事を参照してください。For more information on creating a Storm cluster, see Get started with Storm on HDInsight.

使いやすさEase of use

  • Secure Shell (SSH) 接続: SSH を使用してインターネット経由で Storm クラスターのヘッド ノードにアクセスすることができます。Secure Shell (SSH) connectivity: You can access the head nodes of your Storm cluster over the Internet by using SSH. クラスターには、SSH を使用して直接コマンドを実行できます。You can run commands directly on your cluster by using SSH.

    詳細については、HDInsight での SSH の使用に関するページを参照してください。For more information, see Use SSH with HDInsight.

  • Web 接続: すべての HDInsight クラスターで Ambari Web UI が提供されます。Web connectivity: All HDInsight clusters provide the Ambari web UI. Ambari Web UI を使用すれば、クラスター上のサービスの監視、構成、管理を簡単に行うことができます。You can easily monitor, configure, and manage services on your cluster by using the Ambari web UI. Storm クラスターには Storm UI も用意されています。Storm clusters also provide the Storm UI. Storm UI を使用すれば、お使いのブラウザーから Storm トポロジの実行を監視および管理できます。You can monitor and manage running Storm topologies from your browser by using the Storm UI.

    詳細については、Ambari Web UI を使用した HDInsight の管理に関する記事と、Storm UI を使用した監視と管理に関する記事を参照してください。For more information, see the Manage HDInsight using the Ambari Web UI and Monitor and manage using the Storm UI documents.

  • Azure PowerShell と Azure CLI: PowerShell と CLI はいずれも、HDInsight やその他の Azure サービスを操作するためにクライアント システムから使用できるコマンドライン ユーティリティです。Azure PowerShell and Azure CLI: PowerShell and CLI both provide command-line utilities that you can use from your client system to work with HDInsight and other Azure services.

  • Visual Studio 統合: Azure Data Lake Tools for Visual Studio には、SCP.NET フレームワークを使用して C# Storm トポロジを作成するためのプロジェクト テンプレートが含まれています。Visual Studio integration: Azure Data Lake Tools for Visual Studio include project templates for creating C# Storm topologies by using the SCP.Net framework. また、Data Lake Tools には、HDInsight の Storm によるソリューションのデプロイ、監視、管理のためのツールも用意されています。Data Lake Tools also provide tools to deploy, monitor, and manage solutions with Storm on HDInsight.

    詳細については、HDInsight Tools for Visual Studio を使用した C# Storm トポロジの開発に関する記事を参照してください。For more information, see Develop C# Storm topologies with the HDInsight Tools for Visual Studio.

その他の Azure サービスとの統合Integration with other Azure services

サポートSupport

HDInsight の Storm には、完全なエンタープライズレベルの継続性サポートが付属します。Storm on HDInsight comes with full enterprise-level continuous support. HDInsight の Storm では、99.9% の SLA も保証されています。Storm on HDInsight also has an SLA of 99.9 percent. つまり、Microsoft では、Storm クラスターが 99.9% 以上の時間にわたって外部に接続されることを保証しています。That means Microsoft guarantees that a Storm cluster has external connectivity at least 99.9 percent of the time.

詳細については、「Azure のサポート」を参照してください。For more information, see Azure support.

Apache Storm のユース ケースApache Storm use cases

以下に、HDInsight で Storm を使用する可能性のある一般的なシナリオをいくつか示します。The following are some common scenarios for which you might use Storm on HDInsight:

  • モノのインターネット(IoT)Internet of Things (IoT)
  • 不正行為の検出Fraud detection
  • ソーシャル分析Social analytics
  • 抽出、変換、読み込み (ETL: Extraction、Transformation、Loading)Extraction, transformation, and loading (ETL)
  • ネットワーク監視Network monitoring
  • SearchSearch
  • Mobile EngagementMobile engagement

実際のシナリオの詳細については、企業での Storm の使用事例に関するページを参照してください。For information about real-world scenarios, see the How companies are using Storm document.

開発Development

.NET 開発者は、Data Lake Tools for Visual Studio を使い、トポロジの設計と実装を C# で行うことができます。.NET developers can design and implement topologies in C# by using Data Lake Tools for Visual Studio. Java と C# のコンポーネントを使用するハイブリッド トポロジを作成することもできます。You can also create hybrid topologies that use Java and C# components.

詳細については、Visual Studio を使用した HDInsight での Storm の C# トポロジの開発に関する記事を参照してください。For more information, see Develop C# topologies for Storm on HDInsight using Visual Studio.

任意の IDE を使用して、Java ソリューションを開発することもできます。You can also develop Java solutions by using the IDE of your choice. 詳細については、HDInsight での Storm の C# トポロジの開発に関する記事を参照してください。For more information, see Develop Java topologies for Storm on HDInsight.

Storm コンポーネントの開発には、Python も使用できます。Python can also be used to develop Storm components. 詳細については、HDInsight での Python を使用した Storm トポロジの開発に関する記事を参照してください。For more information, see Develop Storm topologies using Python on HDInsight.

一般的な開発パターンCommon development patterns

メッセージの処理の保証Guaranteed message processing

Apache Storm では、さまざまなレベルでメッセージの処理が保証されています。Apache Storm can provide different levels of guaranteed message processing. たとえば、基本的な Storm アプリケーションは "最低 1 回" の処理を保証できますが、Trident は "厳密に 1 回" の処理を保証できます。For example, a basic Storm application can guarantee at-least-once processing, and Trident can guarantee exactly once processing.

詳細については、apache.org の「 Guarantees on data processing (データ処理の保証) 」をご覧ください。For more information, see Guarantees on data processing at apache.org.

IBasicBoltIBasicBolt

入力タプルを読み込み、0 個以上のタプルを発行し、実行メソッドの終了直後に入力タプルを確認するというパターンが一般的です。The pattern of reading an input tuple, emitting zero or more tuples, and then acking the input tuple immediately at the end of the execute method is common. Storm には、このパターンを自動化する IBasicBolt インターフェイスが用意されています。Storm provides the IBasicBolt interface to automate this pattern.

結合Joins

データ ストリームの結合方法は、アプリケーションによって異なります。How data streams are joined varies between applications. たとえば、複数のストリームの各タプルを 1 つの新しいストリームに結合したり、特定のウィンドウに対してのみタプルのバッチを結合したりする場合があります。For example, you can join each tuple from multiple streams into one new stream, or you can join only batches of tuples for a specific window. いずれの方法でも、結合は fieldsGrouping を使用して行われます。Either way, joining can be accomplished by using fieldsGrouping. フィールドのグループ化は、ボルトに対してタプルがどのようにルーティングされるかを定義する方法です。Field grouping is a way of defining how tuples are routed to bolts.

次の Java の例では、fieldsGrouping は、MyJoiner ボルトへの、コンポーネント "1"、"2"、"3" から発生したタプルのルーティングに使用されています。In the following Java example, fieldsGrouping is used to route tuples that originate from components "1", "2", and "3" to the MyJoiner bolt:

builder.setBolt("join", new MyJoiner(), parallelism) .fieldsGrouping("1", new Fields("joinfield1", "joinfield2")) .fieldsGrouping("2", new Fields("joinfield1", "joinfield2")) .fieldsGrouping("3", new Fields("joinfield1", "joinfield2"));

バッチBatches

Apache Storm は、"tick タプル" と呼ばれる内部の時間調整メカニズムを備えています。Apache Storm provides an internal timing mechanism known as a "tick tuple." トポロジ内で tick タプルが出力される頻度を設定できます。You can set how often a tick tuple is emitted in your topology.

C# コンポーネントからの tick タプルの使用例については、PartialBoltCount.cs を参照してください。For an example of using a tick tuple from a C# component, see PartialBoltCount.cs.

キャッシュCaches

メモリ内キャッシュは、頻繁に使用されるアセットをメモリ内に保持することで、処理速度を上げるためのメカニズムとしてよく使用されます。In-memory caching is often used as a mechanism for speeding up processing because it keeps frequently used assets in memory. トポロジは複数のノード (また各ノード内の複数のプロセス) にまたがって分散されるため、fieldsGrouping の使用を検討してください。Because a topology is distributed across multiple nodes, and multiple processes within each node, you should consider using fieldsGrouping. fieldsGrouping を使用すると、キャッシュの検索に使用されるフィールドを含んだタプルが常に同じプロセスにルーティングされます。Use fieldsGrouping to ensure that tuples containing the fields that are used for cache lookup are always routed to the same process. このグループ化の機能により、プロセス間でのキャッシュ エントリの重複が回避されます。This grouping functionality avoids duplication of cache entries across processes.

"トップ N" のストリーミングStream "top N"

トポロジが "トップ N" の値の計算に依存する場合、トップ N の値を並行して計算する必要があります。When your topology depends on calculating a top N value, calculate the top N value in parallel. その後、これらの計算の出力をグローバル値に結合してください。Then merge the output from those calculations into a global value. この操作を実行するには、fieldsGrouping を使用して並列処理用のフィールド別にルーティングを行います。This operation can be done by using fieldsGrouping to route by field for parallel processing. その後は、トップ N 値をグローバルに決定するボルトにルーティングできます。Then you can route to a bolt that globally determines the top N value.

"トップ N" の値の計算例については、RollingTopWords の例を参照してください。For an example of calculating a top N value, see the RollingTopWords example.

ログの記録Logging

Storm では、Apache Log4j を使用して情報をログに記録します。Storm uses Apache Log4j to log information. 既定では大量のデータがログに記録されるため、情報を調べるのが困難になる可能性があります。By default, a large amount of data is logged, and it can be difficult to sort through the information. Storm トポロジの一部にログの構成ファイルを含めることにより、ログ記録の動作を制御することができます。You can include a logging configuration file as part of your Storm topology to control logging behavior.

ログ記録を構成する方法を示すトポロジの例については、HDInsight で Storm を使用した Java ベースの WordCount の例を参照してください。For an example topology that demonstrates how to configure logging, see Java-based WordCount example for Storm on HDInsight.

次の手順Next steps

HDInsight 上の Storm を使用したリアルタイム分析ソリューションの詳細について学習します。Learn more about real-time analytics solutions with Storm on HDInsight: