Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

FIWARE Big Data Ecosystem : Cygnus and STH Comet

268 views

Published on

FIWARE Cygnus と STH Comet の紹介スライドです。

Published in: Software
  • Be the first to comment

  • Be the first to like this

FIWARE Big Data Ecosystem : Cygnus and STH Comet

  1. 1. FIWARE Big Data ecosystem : Cygnus and STH-Comet Joaquin Salvachua Andres Muñoz Universidad Politécnica de Madrid Joaquin.salvachua@upm.es, @jsalvachua, @FIWARE www.slideshare.net/jsalvachua (Translated into Japanese by Kazuhito Suda k@fisuda.jp)
  2. 2. 1
  3. 3. ビッグデータ分析 2
  4. 4. バッチ処理 3
  5. 5. Lambda アーキテクチャ 4
  6. 6. FIWARE アーキテクチャ 5
  7. 7. Cygnus • 後のバッチ処理のための永続性 (データの収集、集約および移動) • lambda アーキテクチャに統合可能 • 非常に柔軟性があり、設定可能です : pub-sub の ような通信モデルによるストリーム・データ・フローに 基づいています6
  8. 8. Cygnus • 何のためですか? – Cygnusは、構成された特定のサード・パーティ製ストレージ内の永続的な Orion コンテキスト・データを管理し、そのようなデータの履歴ビューを作成するコネクタ です。つまり、Orion はエンティティの属性に関する最後の値のみを格納し、古い 値が必要な場合は、Cygnus を使用して値ごとに別のストレージに保持する必要が あります。 • Orion Context Broker からコンテキスト・データをどのように受け取るのですか? – Cygnus は Orion のサブスクリプション/通知機能を使用します。 Cygnus に代わっ て Orion でサブスクリプションが行われ、これらのエンティティ属性のいずれかで 更新が発生したときに通知を受けたいエンティティが詳述されています。 7
  9. 9. 8 リアルタイムの最終値の コンテキスト・データ 履歴コンテキスト・データ
  10. 10. Cygnus • Cygnus は、構成された特定のサード・パーティ製ストレージ内の特定 のデータソースを永続化し、そのようなデータの履歴ビューを作成する ことを担当するコネクタです • 内部的には、Cygnus は、データ収集と永続性エージェント の Apache Flume に基づいています – エージェントは基本的に、データを受信するリスナまたはソース、データが Flume イベントに変換された後にソースがデータを格納するチャネル、および その本体内のデータをサード・パーティ製ストレージに保存するためにチャネ ルから Flume イベントを取得するシンクから構成されます 9
  11. 11. Cygnus アーキテクチャ • Cygnus は Flume エージェントを実行します。 したがって、Cygnus エー ジェントのアーキテクチャは、Flume エージェントのアーキテクチャです 10
  12. 12. データ・シンク (Data Sinks) • NGSI ライクの コンテキスト・データ : – HDFS, Hadoop 分散ファイルシステム – MySQL, よく知られているリレーショナルデータベースマネージャ – CKAN, オープンデータ・プラットフォーム – MongoDB, NoSQL ドキュメント指向データベース – STH Comet, MongoDB の上に構築された短期履歴データベース – Kafka,パブリック・サブスクライブ型メッセージブローカー – DynamoDB, Amazon Web Servicesサービスによるクラウドベースの NoSQL データベース – PostgreSQL, よく知られているリレーショナルデータベースマネージャー – Carto, ジオ・ロケーション・データに特化したデータベース • Twitter データ: – HDFS, Hadoop 分散ファイルシステム 11
  13. 13. Cygnus イベント • ソースは特定のフォーマットのイベントを消費し、それらのイベントは Web サ ーバのような外部ソースによってソースに配信されます。 たとえば、 AvroSource を使用して、クライアントまたはフロー内の他の Flume エージェ ントから Avro イベントを受け取ることができます。ソースがイベントを受信す ると、ソースは1つまたは複数のチャネルにそれを格納します。チャネルは、 そのイベントがシンクによって消費されるまでイベントを保持するパッシブ・ ストアです。Flume で使用できる Channel の1つのタイプは、ローカル・ファイ ル・システムをバッキング・ストアとして使用するファイル・チャネルです。シ ンクは、チャンネルからイベントを削除し、HDFSEventSink の場合、HDFS のよ うな外部リポジトリに入れるか、フローの次のホップでソースに転送する役 割を担います。 指定されたエージェント内のソースおよびシンクは、チャネ ルでステージングされたイベントと非同期に実行されます 12
  14. 14. Cygnus 設定例 • https://github.com/telefonicaid/fiware- cygnus/blob/master/doc/cygnus- ngsi/installation_and_administration_guide/confi guration_examples.md 13
  15. 15. 複数の永続性バックエンド 14
  16. 16. 複数のエージェント • エージェントごとに1つの インスタンス • これにより、システムに多 くの機能が追加されます 15
  17. 17. Orion Context Broker と Cygnus の接続 • Cygnus は、 Orion Context Broker のサブスクリプション通知メカニズム を利用しています。具体的には、特定のエンティティの属性が変更され るたびに通知を受ける必要があります。そのために、Cygnus はエンテ ィティの属性変更をサブスクライブする必要があります。 16
  18. 18. デフォルトのシンク 17
  19. 19. 18 基本的な NGSI ライクの Cygnus エージェントのアーキテクチャ Cygnus エージェント・アーキテクチャは Cygnus Agent の構成になります (HDFS 永続化の例)
  20. 20. 19 Cygnus エージェントの構成 (単純化された HDFS 永続化の例)
  21. 21. 基本的な Cygnus エージェント 20
  22. 22. 基本的な Cygnus エージェントの構成 21 • Edit /usr/cygnus/conf/agent_<id>.conf • ソース、チャネル、シンクのリスト: cygnusagent.sources = http-source cygnusagent.sinks = hdfs-sink cygnusagent.channels = hdfs-channel • チャネルの構成 cygnusagent.channels.hdfs-channel.type = memory cygnusagent.channels.hdfs-channel.capacity = 1000 cygnusagent.channels.hdfs-channel. transactionCapacity = 100
  23. 23. 基本的な Cygnus エージェントの構成 22 • ソースの構成: cygnusagent.sources.http-source.channels = hdfs-channel cygnusagent.sources.http-source.type = org.apache.flume.source.http.HTTPSource cygnusagent.sources.http-source.port = 5050 cygnusagent.sources.http-source.handler = es.tid.fiware.fiwareconnectors.cygnus.handlers.OrionRestHandler cygnusagent.sources.http-source.handler.notification_target = /notify cygnusagent.sources.http-source.handler.default_service = def_serv cygnusagent.sources.http-source.handler.default_service_path = def_servpath cygnusagent.sources.http-source.handler.events_ttl = 10 cygnusagent.sources.http-source.interceptors = ts de cygnusagent.sources.http-source.interceptors.ts.type = timestamp cygnusagent.sources.http-source.interceptors.de.type = es.tid.fiware.fiwareconnectors.cygnus.interceptors.DestinationEx tractor$Builder cygnusagent.sources.http-source.interceptors.de.matching_table = /usr/cygnus/conf/matching_table.conf
  24. 24. 基本的な Cygnus エージェントの構成 23 • シンクの構成: cygnusagent.sinks.hdfs-sink.channel = hdfs-channel cygnusagent.sinks.hdfs-sink.type = es.tid.fiware.fiwareconnectors.cygnus.sinks.OrionHDFSSink cygnusagent.sinks.hdfs-sink.cosmos_host = cosmos.lab.fi- ware.org cygnusagent.sinks.hdfs-sink.cosmos_port = 14000 cygnusagent.sinks.hdfs-sink.cosmos_default_username = cosmos_username cygnusagent.sinks.hdfs-sink.cosmos_default_password = xxxxxxxxxxxxx cygnusagent.sinks.hdfs-sink.hdfs_api = httpfs cygnusagent.sinks.hdfs-sink.attr_persistence = column cygnusagent.sinks.hdfs-sink.hive_host = cosmos.lab.fi- ware.org cygnusagent.sinks.hdfs-sink.hive_port = 10000 cygnusagent.sinks.hdfs-sink.krb5_auth = false
  25. 25. Cygnus の永続性に関する HDFS の詳細 24 • デフォルトでは、各エンティティごとに Cygnus はデータを次の場所に保存 します : – /user/<your_user>/<service>/<service-path>/<entity-id>-<entity-type>/<entity-id>- <entity-type>.txt • 各HDFSファイル内で、データ形式は json-row または json-column です : – json-row { "recvTimeTs":"13453464536”, "recvTime":"2014-02-27T14:46:21”, "entityId":"Room1”, "entityType":"Room”, "attrName":"temperature”, "attrType":"centigrade”, “attrValue":"26.5”, "attrMd":[ … ] } – json-column { "recvTime":"2014-02-27T14:46:21”, "temperature":"26.5”, "temperature_md":[ … ], “pressure”:”90”, “pressure_md”:[ … ] }
  26. 26. 高可用性 • シンプルな構成: – Flume / Cygnus の HA の実装は、ソフトウェアの2つのインスタ ンスを実行し、それらとデータソースまたはソースの間にロード ・バランサを配置するのと同じくらい簡単です。 • 既定のメモリチャネル(追加の永続性)の代わりに ファイル・チャネルを使用します。. • 高度な構成: – Zookeeper と構成する Flume • https://github.com/telefonicaid/fiware-cygnus/blob/master/doc/cygnus-ngsi/installation_and_administration_guide/reliability.md 25
  27. 27. STH-Comet 26
  28. 28. なぜ? (記憶は重要...) 27 • Orion Broker は、最新の属性値のみを 格納します : – イベント主導の行動指向のパラダイム • Short Time Historic は記憶を 次の要素に追加します : – 継続的改善パラダイム • コード名 – Comet
  29. 29. 何? (時間的にデータの進化...) 28 • 時系列データベース (Time series database) : – 時間でインデックスされた値を処理するよ うに最適化されました – 生データ 対 集計されたデータ – 基本的な集計コンセプト : • 範囲 (Range) • 解像度 (Resolutin) • 原点 (Origin) • オフセット (Offset)
  30. 30. どうやって? (必ずしも “ベスト” とは限りません) 29 • 考慮が必要な側面 – リスク : • 成熟 • 性能 • 専門知識 – 柔軟性 (将来の進化) – 現在のインバージョン
  31. 31. どうやって? (birds-eye 機能: フォーマル構成) 30
  32. 32. どうやって? (birds-eye 機能: 最小構成) 31
  33. 33. アーキテクチャ 32 Node アプリケーション • データベース : – MongoDB • 時系列関数(特定のスキーマ+事前集約)に最適化さ れています • Web サーバ : – hapi • コンポーネントAPIを公開しています – データのレジストレーション – データの取り出し – データの削除 – ログ・レベル
  34. 34. データ・スキーマと事前集計 • STH は、生データ (すなわち属性値) の進展を時間でストアしますが、 その実際の能力は集約されたデータのストレージから来ます • STHは、次のようなクエリにレスポンスできる必要があります: – 最後の1ヶ月間 (範囲) のこの部屋の最高温度を、日 (解像度) ごとに集計し てください – 今日 (範囲) のこの部屋の平均気温を、時または分 (解像度) で集計してくだ さい – 昨年 (範囲) のこの部屋の温度の標準偏差を日ごと (解像度) に集計してくだ さい – 先週の月曜日 (範囲)に、この部屋のエアコンが、オンまたはオフに切り替え られた回数を時 (解像度) で集計してください 33
  35. 35. データ・スキーマと事前集計 34 • 生データから以前のクエリにレ スポンスするために必要な集約 データを計算することは、非常 に非効率的かつ反復的です • ソリューション – データ・スキーマと事前集計
  36. 36. API : raw データの取得 35
  37. 37. ページネーション (Pagination) 36
  38. 38. レスポンス 37
  39. 39. 集計されたデータの取得 38
  40. 40. レスポンス 39
  41. 41. 属性データの削除 40
  42. 42. ログレベルの取得と更新 41
  43. 43. 構成 42 環境変数と config.sys により構成できます • 環境変数 – STH_HOST : STH サーバを起動するホスト。オプション。デフォルト値 : "localhost“ – STH_PORT : STH サーバが待機するポート。オプション。デフォルト値 : "8666" – FILTER_OUT_EMPTY : 空の結果をレスポンスから削除するかどうかを示すフラ グ。オプション。デフォルト値 : "true" – DEFAULT_SERVICE : Orion Context Broker の通知で送信されない場合に使用さ れるサービス。オプション。デフォルト値 : "testservice" – DEFAULT_SERVICE_PATH : Orion Context Broker の通知で送信されない場合に 使用されるサービスパス。オプション。デフォルト値 : "/testservicepath"
  44. 44. 構成 : 環境変数 43 – DATA_MODEL : STHコンポーネントは、未処理データと集約されたデータをデータ ベースに格納するときに、1) 属性ごとに1つのコレクション、2) エンティティごとに1 つのコレクション、3)サービスパスごとに1つのコレクションを、サポートします。可 能な値は、それぞれ、"collection-per-attribute", "collection-per-entity", "collection-per-service-path" です。デフォルト値 : "entity-per-entity" – DB_USERNAME : データベース接続に使用するユーザ名。オプション。デフォルト 値 : "" – DB_PASSWORD : データベース接続に使用するパスワード。オプション。デフォル ト値 : "" – DB_URI : データベース接続に使用するURI。これには 'mongo://' プロトコル部分 は含まれていません。下記のいくつかの例を参照してください。オプション。デフ ォルト値 : "localhost:27017"
  45. 45. 構成 : 環境変数 44 – REPLICA_SET : 接続するレプリカセットの名前(存在する場合)。デフォルト値 : "" – DB_PREFIX : データベースの作成のためにサービスに追加されるプレフィックス。 詳細は下記を参照してください。オプション。デフォルト値 : "sth_" – COLLECTION_PREFIX : データベース内のコレクションに追加されるプレフィックス。 詳細は下記を参照してください。オプション。デフォルト値 : "sth_" – POOL_SIZE : データベース接続の MongoDB プールサイズのデフォルト値。オプシ ョン。デフォルト値 : "5" – WRITE_CONCERN : MongoDB データベースにデータを書き込むときに適用する書 き込み確認ポリシー。デフォルト値 : "1" – SHOULD_STORE : 未処理データおよび/または集約されたデータを永続化する かどうかを示すフラグ。有効な値は、"only-raw", "only-aggregated", "both" です。 デフォルト値 : "both"
  46. 46. 構成 : 環境変数 45 – TRUNCATION_EXPIRE_AFTER_SECONDS : 未処理および集約されたデータコレクシ ョンのデータは、秒単位で指定された値よりも古い場合は削除されます。未処理 データの場合、参照時間は recvTime プロパティに格納された時間ですが、集計 されたデータの場合、時間の参照は _id.origin プロパティに格納された時間です 。この時間ベースの切捨てポリシーを適用しない場合は、値を0に設定します。デ フォルト値 : "0"
  47. 47. 使い方とインストール • インストール – git clone https://github.com/ging/fiware-sth-comet – npm install • Docker – docker pull fiware/sth-comet – docker run –t –i fiware/sth-comet • 実行 – Fiware-sth-comet> ./bin/sth46
  48. 48. FIWARE アーキテクチャ 47
  49. 49. 質問 48
  50. 50. 追加のドキュメント • readthedocs.org にあるエージェントごとのクイック・スタート・ガイドは、ドキュ メントの概要をまとめたものです (cygnus-ngsi, cygnus-twitter) • readthedocs.org にある各エージェントのインストール&管理ガイドとユーザ& プログラマー・ガイドの両方が、より高度なトピックをカバーしています • エージェントごとの Flume Extensions Catalog は、Cygnus の利用可能なドキ ュメントを完全なものにします (cygnus-ngsi, cygnus-twitter). • その他の興味深いリンクは : • Cygnus の API メソッドを使用する方法を知りたい場合は、 Apiary Documentation を参照してください。. • cygnus-ngsi インテグレーションの例 • FIWARE Academy の cygnus-ngsi 入門コース 49
  51. 51. ラウンド・ロビン・チャネルの選択 50 • パフォーマンスを向上させるために、ストレージごとに 複数のチャネル・シンク・ペアを構成することが可能です • カスタム ChannelSelector が必要です https://github.com/telefonicaid/fiware- connectors/blob/master/flume/doc/operation/performance_tuning_ tips.md
  52. 52. RoundRobinChannelSelector の構成 51 cygnusagent.sources = mysource cygnusagent.sinks = mysink1 mysink2 mysink3 cygnusagent.channels = mychannel1 mychannel2 mychannel3 cygnusagent.sources.mysource.type = ... cygnusagent.sources.mysource.channels = mychannel1 mychannel2 mychannel3 cygnusagent.sources.mysource.selector.type = es.tid.fiware.fiwareconnectors.cygnus.channelselectors. RoundRobinChannelSelector cygnusagent.sources.mysource.selector.storages = N cygnusagent.sources.mysource.selector.storages.storage1 = <subset_of_cygnusagent.sources.mysource.channels> ... cygnusagent.sources.mysource.selector.storages.storageN = <subset_of_cygnusagent.sources.mysource.channels>
  53. 53. パターンベースのコンテキスト・データのグループ化 52 • デフォルトのデスティネーション (HDFS ファイル, MySQL テーブル, または CKAN リソ ース)は、連結 (concatenation) として取得されます: – destination=<entity_id>-<entityType> • Flumeインターセプタとして実装されたこの正規表現ベースの機能のおかげで、 さまざまコンテキスト・データをグループ化することが可能です。 : cygnusagent.sources.http-source.interceptors = ts de cygnusagent.sources.http-source.interceptors.ts.type = timestamp cygnusagent.sources.http-source.interceptors.de.type = es.tid.fiware.fiwareconnectors.cygnus.interceptors.DestinationExtract or$Builder cygnusagent.sources.http-source.interceptors.de.matching_table = /usr/cygnus/conf/matching_table.conf
  54. 54. パターンベースのグループ化のためのマッチング・テーブル 53 • ルールを含む CSV ファイル (‘|’ field separator) – <id>|<comma-separated_fields>|<regex>|<destination>|<destination_dataset> • たとえば : 1|entityId,entityType|Room.(d*)Room|numeric_rooms|rooms 2|entityId,entityType|Room.(D*)Room|character_rooms|rooms 3|entityType,entityId|RoomRoom.(D*)|character_rooms|rooms 4|entityType|Room|other_roorms|rooms • https://github.com/telefonicaid/fiware- connectors/blob/master/flume/doc/design/interceptors.md#destinationextractor-interceptor
  55. 55. Kerberos 認証 54 • 認証目的で HDFS を Kerberos で保護することができます • 設定された HDFS ユーザに登録された Kerberos プリンシパルがあり、この設定が追 加された場合、Cygnus は Kerberos 化された HDFS 上で永続化することができます: cygnusagent.sinks.hdfs-sink.krb5_auth = true cygnusagent.sinks.hdfs-sink.krb5_auth.krb5_user = krb5_username cygnusagent.sinks.hdfs-sink.krb5_auth.krb5_password = xxxxxxxxxxxx cygnusagent.sinks.hdfs-sink.krb5_auth.krb5_login_file = /usr/cygnus/conf/krb5_login.conf cygnusagent.sinks.hdfs-sink.krb5_auth.krb5_conf_file = /usr/cygnus/conf/krb5.conf • https://github.com/telefonicaid/fiware- connectors/blob/master/flume/doc/operation/hdfs_kerberos_authen tication.md
  56. 56. Thank you! http://fiware.org Follow @FIWARE on Twitter
  57. 57. FIWARE Big Data ecosystem : Cygnus and STH-Comet Joaquin Salvachua Andres Muñoz Universidad Politécnica de Madrid (UPM) Joaquin.salvachua@upm.es, @jsalvachua, @FIWARE www.slideshare.net/jsalvachua

×