Abstract - acromusashi/acromusashi-stream-example GitHub Wiki

Abstract

Exampleプロジェクト概要

AcroMUSASHI Stream Exampleプロジェクトは
下記のようなプロセス構成におけるサンプルTopology(=HadoopにおけるJobに相当)と、
Topologyと通信を行うプロセスの設定をまとめたものです。

上記の図中で記述されている各プロセスについては下記URLを確認してください。

プロセス プロセスの役割 Source URL / Note
SnmpToolkit イベントルーティングプロセスに対してSNMP Trapを送信する送信元プロセス http://code.google.com/p/snmptoolkit/
Camel 受信したイベントを次プロセスに投入するイベントルーティングプロセス http://camel.apache.org/
Kestrel 受信したイベントの永続化が可能な、メッセージキュー https://github.com/robey/kestrel
Storm Topology データを連続的に処理し続けるストリーム処理プロセス http://storm-project.net/

サンプルTopology一覧

Exampleプロジェクトで提供しているサンプルTopology一覧は下記の通りです。
利用方法についてはシングルプロセスでの利用方法Camelの利用方法Kestrelの利用方法SnmpToolkitの利用方法Javadocを参照してください。
下記のサンプルTopologyを実行する際にはacromusashi-example-X.X.X.jarとyamlファイルを
StormクラスタのNimbusノードに配置し、一覧にあるコマンドを実行してください。
その際yamlファイルのKestrel.Hostsのポート番号部分にはKestrelの利用方法で設定しているthriftListenPortの値を設定してください。

Topology名称 機能
HbaseStoreTopology HBase DataStore用のTopologyを起動する。
Topologyの動作フローは下記の通り。
  1. PeriodicalMessageGenSpoutにてメッセージを生成する
  2. CamelHbaseStoreBoltにて[hbase-site.xml]に指定したHBaseに対してデータを投入する
クラスタモード起動コマンド例(1行で記述してください):
bin/storm jar acromusashi-example-X.X.X.jar acromusashi.stream.example.topology.HbaseStoreTopology conf/HbaseStoreTopology.yaml false
HdfsStoreTopology HDFS DataStore用のTopologyを起動する。
Topologyの動作フローは下記の通り。
  1. PeriodicalMessageGenSpoutにてメッセージを生成する
  2. HdfsStoreBoltにて設定項目[hdfsstorebolt.~]に設定したHDFSに対してデータを投入する
クラスタモード起動コマンド例(1行で記述してください):
bin/storm jar acromusashi-example-X.X.X.jar acromusashi.stream.example.topology.HdfsStoreTopology conf/HdfsStoreTopology.yaml false
LocalConsolePrintTopology StormTopologyから外部には接続せず、共通メッセージをコンソール出力するTopology
Topologyの動作フローは下記の通り。
  1. PeriodicalMessageGenSpoutにて共通メッセージを生成する
  2. CamelHbaseStoreBoltにて共通メッセージをコンソールに出力する
クラスタモード起動コマンド例(1行で記述してください):
bin/storm jar acromusashi-example-X.X.X.jar acromusashi.stream.example.topology.LocalConsolePrintTopology conf/LocalConsolePrintTopology.yaml false
LocalJdbcStoreTopology StormTopologyから外部には接続せず、Snmp型共通メッセージをH2データベースに保存するTopology

Topologyの動作フローは下記の通り。
  1. PeriodicalSnmpGenSpoutにてSNMP形式の共通メッセージを生成する
  2. CamelJdbcStoreBoltにて設定項目[dataSource]に設定したDataSourceに対してデータを投入する
クラスタモード起動コマンド例(1行で記述してください):
bin/storm jar acromusashi-example-X.X.X.jar acromusashi.stream.example.topology.LocalJdbcStoreTopology conf/LocalJdbcStoreTopology.yaml false
Snmp2HbaseHdfsStoreTopology HBase/HDFS DataStore用のTopologyを起動する。
Topologyの動作フローは下記の通り。
  1. KestrelThriftSpoutにてSNMPメッセージをJSON形式で受信する
  2. MessageConvertBoltにてJSON形式のTrapを共通メッセージ形式に変換する
  3. CamelHbaseStoreBoltにて共通メッセージをHBaseに保存する
  4. HdfsStoreBoltにて共通メッセージをHDFSに保存する
クラスタモード起動コマンド例(1行で記述してください):
bin/storm jar acromusashi-example-X.X.X.jar acromusashi.stream.example.topology.Snmp2HbaseHdfsStoreTopology conf/Snmp2HbaseHdfsStoreTopology.yaml false
Snmp2HbaseStoreTopology HBase DataStore用のTopologyを起動する。
Topologyの動作フローは下記の通り。
  1. KestrelThriftSpoutにてSNMPメッセージをJSON形式で受信する
  2. MessageConvertBoltにてJSON形式のTrapを共通メッセージ形式に変換する
  3. CamelHbaseStoreBoltにて共通メッセージをHBaseに保存する
クラスタモード起動コマンド例(1行で記述してください):
bin/storm jar acromusashi-example-X.X.X.jar acromusashi.stream.example.topology.Snmp2HbaseStoreTopology conf/Snmp2HbaseStoreTopology.yaml false
Snmp2HdfsStoreTopology HDFS DataStore用のTopologyを起動する。
Topologyの動作フローは下記の通り。
  1. KestrelThriftSpoutにてSNMPメッセージをJSON形式で受信する
  2. MessageConvertBoltにてJSON形式のTrapを共通メッセージ形式に変換する
  3. HdfsStoreBoltにて共通メッセージをHDFSに保存する
クラスタモード起動コマンド例(1行で記述してください):
bin/storm jar acromusashi-example-X.X.X.jar acromusashi.stream.example.topology.Snmp2HdfsStoreTopology conf/Snmp2HdfsStoreTopology.yaml false
Snmp2JdbcStoreTopology データベース用のTopologyを起動する。
Topologyの動作フローは下記の通り。
  1. KestrelThriftSpoutにてSNMPメッセージをJSON形式で受信する
  2. MessageConvertBoltにてJSON形式のTrapを共通メッセージ形式に変換する
  3. CamelJdbcStoreBoltにて設定項目[dataSource]に設定したDataSourceに対してデータを投入する
クラスタモード起動コマンド例(1行で記述してください):
bin/storm jar acromusashi-example-X.X.X.jar acromusashi.stream.example.topology.Snmp2JdbcStoreTopology conf/Snmp2JdbcStoreTopology.yaml false
TwitterJsonConsolePrintTopology TwitterJSON形式で取得したデータを共通メッセージに変換し、コンソール出力するTopology
Topologyの動作フローは下記の通り。
  1. KestrelThriftSpoutにてTwitterJSON形式の文字列を受信する
  2. MessageConvertBoltにてTwitterJSON形式の文字列を共通メッセージ形式に変換する
  3. ConsolePrintBoltにて共通メッセージをコンソールに出力する
クラスタモード起動コマンド例(1行で記述してください):
bin/storm jar acromusashi-example-X.X.X.jar acromusashi.stream.example.topology.TwitterJsonConsolePrintTopology conf/TwitterJsonConsolePrintTopology.yaml false
KafkaEsTopology KafkaからJSON文字列を取得し、ElasticSearchに投入するTopology
Topologyの動作フローは下記の通り。
  1. KafkaSpoutにてTJSON形式の文字列を受信する
  2. ElasticSearchBoltにてElasticsearchに対してJSON文字列を投入する
クラスタモード起動コマンド例(1行で記述してください):
bin/storm jar acromusashi-example-X.X.X.jar acromusashi.stream.example.topology.KafkaEsTopology conf/KafkaEsTopology.yaml false
KmeansTopology KMeansクラスタリングを行うTopology
ファイルから点データを読み込み、KMeans++アルゴリズムを使用してクラスタリングを行う。
クラスタリングを行った結果の学習データをInfinispanに保存する。
設定時間間隔で学習モデルのマージを行い、複数スレッド間で発生した差分の補正を行う。
DRPCで判定用データを受信し、クラスタリングを行った結果を返す。

Topologyの動作フローは下記の通り。
入力Stream
  1. TextReadBatchSpoutにてファイルを読み込み、1行を1データとして分割する。
  2. KmeansCreatorにてKMeansクラスタリング用データに変換する。
  3. KmeansUpdaterにてKMeansクラスタリング用データを学習モデルに反映し、学習モデルの更新を行う。
判定Stream
  1. DRPCSpoutにてDRPCクライアントから送信された判定用データを受け取る。
  2. KmeansCreatorにてKMeansクラスタリング用データに変換する。
  3. KmeansQueryにて学習モデルを用いてクラスタリング判定を行い、結果を返す。
yamlファイルから読み込む設定値については「KmeansTopology.yaml」参照。

クラスタモード起動コマンド例(1行で記述してください):
bin/storm jar acromusashi-example-X.X.X.jar acromusashi.stream.example.ml.topology.KmeansTopology conf/KmeansTopology.yaml false
LofTopology LOFスコア算出を行うTopology
ファイルから点データを読み込み、LOFアルゴリズムを使用してスコア算出を行う。
LOFスコア算出を行った結果の学習データをInfinispanに保存する。
設定時間間隔で学習モデルのマージを行い、複数スレッド間で発生した差分の補正を行う。
DRPCで判定用データを受信し、クラスタリングを行った結果を返す。

Topologyの動作フローは下記の通り。
入力Stream
  1. TextReadBatchSpoutにてファイルを読み込み、1行を1データとして分割する。
  2. LofCreatorにてLOF判定用データに変換する。
  3. LofUpdaterにてLOF判定用データを学習モデルに反映し、学習モデルの更新を行う。
判定Stream
  1. DRPCSpoutにてDRPCクライアントから送信された判定用データを受け取る。
  2. LofCreatorにてLOF判定用データに変換する。
  3. LofQueryにて学習モデルを用いてLOFスコア算出を行い、結果を返す。
yamlファイルから読み込む設定値については「LofTopology.yaml」参照。

クラスタモード起動コマンド例(1行で記述してください):
bin/storm jar acromusashi-example-X.X.X.jar acromusashi.stream.example.ml.topology.LofTopology conf/LofTopology.yaml false
EndoSnipeTridentTopology ENdoSnipeに統計結果を通知するTridentTopology
KafkaからApacheログ(JSON形式)を読み込み、Apacheホスト毎にグルーピングをかけてレスポンスタイムに対するChangeFinderアルゴリズムによる変化点検出を行う。
変化点検出後、ホスト毎に統計を行い、結果をENdoSnipe(DataCollector)に通知する。

Topologyの動作フローは下記の通り。
  1. TridentKafkaSpoutにてKafkaからApacheログ(JSON形式)を読み込む。
  2. ApacheLogSplitFunctionにてJSONをエンティティに変換する。
  3. ChangeFindFunctionにてレスポンスタイムに対するChangeFinderアルゴリズムによる変化点検出を行う。
  4. ApacheLogAggregatorにてホスト毎に統計を行う。
  5. EndoSnipeNotifyFunctionにて統計結果をENdoSnipe(DataCollector)に通知する。
yamlファイルから読み込む設定値については「EndoSnipeTridentTopology.yaml」参照。

クラスタモード起動コマンド例(1行で記述してください):
bin/storm jar acromusashi-example-X.X.X.jar acromusashi.stream.example.ml.topology.EndoSnipeTridentTopology conf/EndoSnipeTridentTopology.yaml false
⚠️ **GitHub.com Fallback** ⚠️