勉強会メモ - Norikra meetup
昨日の今日で Norikra meetup に参加しています!アツい!かなり参考になった&早速つかってみようと思いました!まずは、ログの集計からかなー。
というわけで、以下メモです。
ストリーム処理とは、およびNorikraの概要と機能
@tagomoris
- processing model (バッチ、ストリーム=Storm,Spark streaming, and Norikra!)
- Batch
- RDBMS,Hadoop,Hive ...
- トータルのスループットは高いが、レイテンシーが遅い。
- Streaming
- 秒単位から分単位で処理を行う、リアルタイムでの変換出力処理
- トータルのスループットは良くないが、レイテンシーは短い。
- 前提条件:データが来る前にどういう結果がほしいか書いておく必要がある
- Query
- Batch:RDBの場合クエリが実行されるまでどの値が参照されるかは分からないので、全て保存しておく必要がある。あとで、保存されているデータについては、繰り返し集計処理が可能。
- stream:処理対象としたいデータ以外は捨てられる、処理後はデータを捨てられるので、ストレージ管理が楽。集計結果は概ねデータが小さく、オンメモリで持つことができることが多いのでレイテンシが短い。
- Data window
- stream処理の場合、予め処理対象としたい時間や件数の範囲を指定しておく必要がある(でないとずっと集計し続ける)
- Esper との比較
- SQL でストリーム処理が可能
- 予めスキーマ定義が必要、Java に組み込むことが前提
- Norikra
- スキーマレス、サーバーソフトウェア、JVM、GPLv2
- github.com/norikra
- スキーマレスなので、データの追加削除が自由
- SQL が使える、JOIN や サブクエリ、UDF
- ネストした複雑なデータ構造も扱える
- インストール超簡単。jruby が必要だが gem install norikra で
- norikra-client / UI もある.
TBD
@fuba
- 集計してみた
- 在庫少目のワールドワイドなリワード広告
- ログ流量が10M行/day ぐらい
- レポートが重要
- 前:hourly で hive/shib を使って集計していたが時間がかかっていた(1分)
- norikra を使うと1分に短縮、クエリもかなりシンプルに
- hadoop クラスタの負荷が減った。速報値の毎時レポートが高速で出せるようになった。
- JVM GC に注意。クエリが突然消えた事もあった・・・
- app -> fluentd -> norikra の間でログの転送の時間にわずかなズレが生じ、window から漏れて集計される範囲がずれることがあり、horly だけでなく daily でも集計して調整。アクセス数が多いサービスだと、僅かなズレでも大きな差になることがある。
参考資料:Hadoop Conference Japan 2014 の資料 Batch processing and Stream processing by SQL
Norikraでアプリログを集計してリアルタイムエラー通知
- アプリのログを検知したいが、メール通知やIRCにリアルタイムで流すと大量に汚す事がある。
- サマライズしてだす。Norikra でサマライズ。app -> fluentd -> norikra
- norikra から結果を pl で定期的に fetch して、IRC に流す。
- メリット
- 複数ノード、インスタンスのアプリログをまとめられる
- fluentd に投げておけばアプリの外で使える
- ロガーと別に通知処理を入れられる
- 不満、プロジェクト米にクエリ登録したり、cron 登録するのがめんどくさい。
- インストール簡単!
普通の SQL かければだいたい使える!
QA
- 一日ごとに0時0分0秒に出したい、という区切りタイミングを設定することは可能
- 落ちるとオンメモリなので全部消える
- 結果を出力する仕組みがないので、外部からフェッチするコードを書く必要がある
- 複数のクライアントから結果をフェッチすることも可能(一度見ても消さないオプションが有る)
- fluentd のプラグインに、結果をインプットとして扱うプラグインがあるので再度流し直すことがもできる。
Norikra+BigQueryのラムダアーキで120k req/sのリアルタイム分析
@kazunori_279
- ビックデータをリアルタイムで分析したい
- BigQuery + fluentd + Norikra でラムダアーキテクチャ
- BigQuery = MPP クエリエンジン
- BigQuery Streaming API で直接 REST でデータを投入できる。API をつつけるfluentd のプラグインもある
- リアルタイムに集計するには Norikra が必要だった。
- 例えばリアルタイムで売上を集計したりできるんではないか?
- ラムダアーキテクチャ
- Storm の開発者が提唱
- リアルタイム処理はインメモリで貼りたいけど、メモリ量に制限されたり消えたりする
- 一方でバッチ処理は遅いが、過去のものを集計できたり保存できたりする。
- 2つのいいとこ取りをやる!
- リアル外務のグラフ化エンジンに Google Spreadsheet を利用できる
- BigQuery を書いて実行できる。これを一分おきに実行してグラフ化する。 (spreadシートのマクロ)
- github.com/GoogleCloudPlatform/lambda-dashboard で公開している
- docker も公開している
- アプリケーション例
- ビジネス系の KPI ダッシュボード (POSデータの分析とか)
- ゲームのディレクターさんがリアルタイムで見たい
- 実運用に投入済み!
Norikraのアレな機能あれこれ
タゴ=モリス
- クエリー
- 停止すると登録したクエリーは消える ---stats=PATH オプションで保存、warning で保存オプションを指定していない警告をしてくれる、ファイルがあると自動で読み込んでくれる
- --dump-stat-interval=N 指定した期間で定期的に保存してくれる
- --stats-secondary=PATH_PATTERN 日付パターンをしていしてバックアップできる。
- JVM options
- GCオプションをデフォルトで自動で色々と指定してくれる。--bare-jvm を指定するとオプションを空にしてくれる。--gc-log を指定することができる。
- ヒープのオプションはデフォルトでは指定していない、自分で指定すること。 norikra start -Xmx2g
- 実は -Xmx500m が付いている?
- select * from ...
- そのままでは動かない。スキーマを持たないので * ってなにってなる。
- は今後禁止したい
- Query group
- クエリを登録するときに name,group,statement をしていする、
- Loopback query group 。結果を再度回して、再度集計することができる。
超自然言語ストリームのリアルタイム解析&集計&可視化と応用
@ixixi
- 生放送のレコメンドにコメントを使いたい。コメントはストリームなのでリアルタイム処理が必要。
- ニコニコのコメント分析はかなり難しい
- 超自然言語処理=自然な話し言葉でも、自然な書き言葉でもない、が、ネットではこれが自然(関根先生)
- モバイルの普及によるハイコンテクスト化=入力から選択へ。(スタンプやYoなど)
- 形態素解析不能・・
- 力技で分類しているツール(コメント分類器 comment_classifier.js)があり、それに norikra で集計した結果を食わせるて分析。
- fluentd を中心にして分類
- 番組の「雰囲気スコア」を算出。時間ごとに減衰するモデルで算出。(指数関数的減衰モデル)
- サブクエリを多用したごつい EPL よりも、LOOPBACK を多用してチェインしたほうがメンテしやすい
- Norikra Query Chain editor
- 本当にやりたいのは可視化ではなく、システムに組み込みたい。リアルタイムレコメンド。
- 外部データとの join は内部は現状できないので、外部で取得して流し込む
- リアルタイムコメント代表値検出
- Norikra-UDF-Jubatus - 分類不能なコメントが4割あるのでJubatusに渡したい。
- UDF/UDAFを使えば未来が開ける!
- 超自然言語処理は汎用化は難しい。特化したアプローチで挑むべし。
Norikraを非リアルタイムなデータ集計に使う試み
@yunazuno
- トラフィックの集計
- 間にアプライアンスが入っていて csv を出してくるが、フォーマットが自由で集計が難しい。(自由なCSV)
- win:time_batch 送り側と受け側(norikra)が同じ時間で動いていると想定してウインドウを設定。ずれるとうまくない。
- win:ext_time_batch レコード中のタイムスタンプを元に集計する
- Norikra な理由
- 意外と気軽に使える。わりとフォーマットの変更に追随しやすい。クエリを直すだけなので。
- Excel で開けない csv の分析にも
Norikra+FluentdでDoS攻撃をブロックする仕組みを作ってみた
http://dev.classmethod.jp/cloud/aws/block_dos_attack_by_norikra/
@vananasian
- ELBを挟むとインターナルIPになるので、商用のソフトウェアでブロックできなかった
- Norikra で HTTP ログをリアルタイム集計し、検知すると VPC のネットワークACLを更新してブロックするという仕組み。
- ext_time_batch はtimestamp値で完全にソートされている必要がある。逆転した時点で以降捨てられるので、注意。
今日の一言。
モリス氏はクライマー #norikra
— よしだ (@yoshi0309) 2014, 7月 9