Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Norikra Meetup

Norikra meetup

http://atnd.org/events/51508

id 内容 memo
@tagomoris ストリーム処理とは、およびN/rikraの概要と機能 https://gist.github.com/rkmathi/b38759a0d24a40e814fa#file-norikra-meetup-1-md
@fuba TBD https://gist.github.com/rkmathi/b38759a0d24a40e814fa#file-norikra-meetup-2-md
id:kawamuray Norikraでアプリログを集計してリアルタイムエラー通知 https://gist.github.com/rkmathi/b38759a0d24a40e814fa#file-norikra-meetup-3-md
@kazunori_279 Norikra+BigQueryのラムダアーキで120k req/sのリアルタイム分析 https://gist.github.com/rkmathi/b38759a0d24a40e814fa#file-norikra-meetup-4-md
タゴ=モリス Norikraのアレな機能あれこれ https://gist.github.com/rkmathi/b38759a0d24a40e814fa#file-norikra-meetup-5-md
@ixixi 超自然言語ストリームのリアルタイム解析&集計&可視化と応用 https://gist.github.com/rkmathi/b38759a0d24a40e814fa#file-norikra-meetup-6-md
@yunazuno Norikraを非リアルタイムなデータ集計に使う試み https://gist.github.com/rkmathi/b38759a0d24a40e814fa#file-norikra-meetup-7-md
@vananasian Norikra+FluentdでDoS攻撃をブロックする仕組みを作ってみた https://gist.github.com/rkmathi/b38759a0d24a40e814fa#file-norikra-meetup-8-md

田籠さん @tagomoris (LINE)

http://www.slideshare.net/tagomoris/stream-processing-and-norikra

Norikra is not Norika !

バッチ処理とストリーム処理

  • バッチ処理
    • 後でまとめてドカっと処理
    • Haddop, Hive, ...
  • ストリーム処理
    • 随時処理
    • Norikra, Spark, ...

バッチ処理

  • 週単位、月単位などで集計し、その後一気に処理
  • トータルのスループットは良いが、データ量が溜まっていて多いので時間がかかる
    • 処理効率が落ちたり、スペース効率が落ちたりする
    • 保存してあるデータに対してはいつでもクエリを発行できる

ストリーム処理

  • 処理のターゲットは、秒単位から分単位、長くても時単位
  • 入ってきたデータに対してリアルタイムに変換などを掛けて、そのまま出力する
  • トータルのスループットはバッチ処理よりは良くないが、直ぐに結果が出る
  • データが来る前に、どういう結果がほしいのかの条件を事前に決めておく必要がある
  • クエリが実行されるまでどの値が参照されるかわからない

Esper

SQLでストリーム処理を行うもの

Norikra

スキーマレスなストリーム処理をSQLでする

  • いつでもクエリを足したり引いたりすることが可能
  • JOINとかSubQueriesもつかえる
  • UDFを使うことができる(Java/Ruby/Scala/...)
  • Esperではダメだった、ネストしたオブジェクトも扱える
  • HTTPのRPCを持っているのでJSONかMessagePackとかfluentdプラグインからデータを流し込める

セットアップ

  • JRubyをインストール
  • gem install norikra
  • norikra start

クエリを追加したりとかを、コマンドラインでできる

  norikra-client target open ...
  norikra-client query add ..

Norikraのクエリ

  SELECT name, age FROM events WHERE current="Tsukuba"
  • where句とかも普通に使える

ネストしたオブジェクトもつかえる

  SELECT user.age, COUNT(*) as cnt FROM events.win:time_batch(5 mins) GROUP BY user.age
  • Esper EPLではこのような処理はできない

クエリをガンガン書いて楽しめる

@fuba さん

Norikraを使って速報レポートを作ってみた

サービスのレポートを作る

サービスの概要

  • 在庫少なめなワールドワイドなリワード広告
  • ログ流数 10M行/dayくらい

当初のレポート

  • Hourlyでhive/shibを使って集計 (5分くらい)
    • 広告、国、言語
    • 時間がかかっていた
  • 毎時このクエリを出すのをやめろと言われたのでNorikraへ

Norikraなら1分以内になった

  • Haddopクラスタの負荷が減った
  • 速報値の毎時レポートが高速で出せるようになった

id:kawamuray さん (LINE)

Norikraでアプリログを集計してリアルタイムエラー通知

jrubyでudfをかける方法を発明したりした

アプリのログ監視をどうするか

screen or tmux + tail -F ??

サマライズする

  • メッセージは変数によって微妙に違うかもしれない
    • ログのレベル、ファイル、行が同じなら同じような内容とみなしちゃう
  • エラー通知はきっかけ、ざっくりわかれば良い

fluentd → Norikra

crontabで定期的にフェッチしてくる

App → fluentd → Norikra → norikra-error-notify.pl @ crontab → IRC

スッキリ!!

良い点

  • 複数ノード、複数インスタンスのアプリログをまとめられる
  • Fluentdに投げておけばアプリの外側でもできる

展望

  • 不満
    • プロジェクトごとにクエリ登録したりcron仕掛けるのめんどい
    • 1土喜多通知が修正作業中に何度も来るのうっとおしい
  • そのへんめんどうみてくれるいい感じのアプリでも作りたい

まとめ

アプリのログは書くだけでなく、監視して活用しましょう

Norikraについて

  • Norikraは身近なとこでも使える
  • SQL書ければだいたい使える
  • ログ + ストリーム(リアルタイム)処理の組み合わせは色々できそう

@kazunori_279 さん (Google)

https://speakerdeck.com/kazunori279/building-a-lambda-architecture-in-10-minutes-with-bigquery-cep-and-docker

Building a Lambda Architecture in 10 minutes

ビッグデータをリアルタイムに処理したい

200のWebサービスをリアルタイムになんとかしたい

Lambda Architectureをつかう

  • Big Data → Fluentd → Norikra → Lambda Architecture
  • Google BigQuery つおい

BigQuery Streaming

fluentd-plugin-bigquery

Lambda Architecture

[http://lambda-architecture.net/]

次の2つの組み合わせ

  • インメモリでリアルタイム処理
  • 大きなバッチ処理

タゴ=モリスさん

http://www.slideshare.net/tagomoris/norikra-meetup-features

Norikraの機能とか

Norikraはtargetとqueryをデフォルトでは保存していない

  • v1.0.4では警告ログを吐くようにした
  • --stats=PATHというオプションを使えば、使用したtargets/queriesを保存できる

GC

  • --gc-log=PATHでGCについてのログをよく吐くようになる

JVM option

  • norikra start -Xmx2gみたいにすると、-Xmx2gオプションが渡る
    • が、JVMが二度起動するので遅くなる :(

"SELECT * FROM ..."

  • Norikraでこのようなクエリを普通に投げるとうまく動かない
  • Norikraはスキーマレスなので*を解釈できない

Query Group

  • クエリを登録するときに、「クエリの名前」「クエリのグループ」「クエリ文」の3要素がある
  • Query group "LOOPBACK(target_name)"

困ったらオンラインのドキュメントを読め!

@ixixi さん (Dwango)

超自然言語ストリームのリアルタイム解析&集計&可視化と応用

ニコニコ生放送

生放送の盛り上がっているを把握したい

  • 生放送なので、数秒後には結果を出したい

ニコニコのコメント分析の難しさ

超自然言語処理

ハイコンテクスト化

顔文字とか話し言葉は形態素解析できない

  • ニコニコ大百科データからMecabとか…

汎用的な処理は難しいので、ドメイン特化

Query chainかサブクエリか

@yunazuno さん (LINE)

https://speakerdeck.com/yunazuno/norikrawofei-riarutaimunadetaji-ji-nishi-ushi-mi

Norikraを非リアルタイムなデータ集計に使う試み

大きなCSVファイルはExcelで開けない

  • Norikraで集計

Externally timed batch window

大量のCSVをNorikraでバッチ処理した後に、処理結果をCSVで出力

Norikraは気軽に使える

  • 気軽さ大事

fluentd-plugin-netflowとかいうのが素敵

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.