Your SlideShare is downloading. ×
Common Lisp でビッグデータを作ろう
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Common Lisp でビッグデータを作ろう

557
views

Published on

Shibuya.lispのLisp Meet Up #10で発表した資料です。 …

Shibuya.lispのLisp Meet Up #10で発表した資料です。
スライドだと舌足らずなところがあるのでUstreamの発表も合わせてご覧下さい

Published in: Technology

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
557
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
1
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Common Lispでビッグデータを作ろ う Lisp Meet Up #10 κeen(@blackenedgold)
  • 2. 自己紹介 ● κeen ● 数学科生の就活生 ● Common Lisp, Ruby, Emacs Lispな人 ● @blackenedgold ● http://keens.github.io ● 就活生
  • 3. ビッグデータとは? ● 定義は色々 ● 「アプリケーションの吐き出す大量のデータ」 ● ビッグデータを作る=アプリにデータを吐かせ る という訳で今回はログの話をします タイトルは釣りでした
  • 4. Log4CL ● ● ● ● CLikiのCurrent recommended librariesにある 高速かつカスタマイザブルな 出力 JavaのLog4Jを参考に作られた ユーザーフレンドリーなイン ターフェース
  • 5. Usage ● (log:config <many-configs>) – – ● (log:config :debug :daily “logfile.log” :backup nil) debug以上を出力、”logfile.log”にも出力 (log:<log-level> “~a~a” args) – (log:info “~{~a~^, ~}” '(a b c)) – “a, b, c”を出力<demo1>
  • 6. 論理出力先 もうちょっと詳しく logger category App 物理出力先 物理出力先 appender appender layout layout ファイル コンソール
  • 7. (ql:quickload :log4cl) (ql:quickload :cl-syslog) 拡張してみる <demo2> ;; アペンダを定義 (defclass syslog-appender (log4cl-impl:appender) ()) ;; アペンダの出力方法を定義 (defmethod log4cl-impl:appender-do-append ((appender syslog-appender) logger level log-func) ;; 出力はcl-syslogに丸投げ。 (cl-syslog:log "log4cl" :local7 :info (with-output-to-string (s) (log4cl-impl:layout-to-stream (slot-value appender 'log4cl-impl:layout) s logger level log-func)))) ;; ロガーを作成 (defvar syslog-logger (log:category '(syslog))) ;; ロガーにアペンダを対応付ける (log4cl-impl:add-appender syslog-logger (make-instance 'syslog-appender)) ;; ログ出力 (log:i :logger syslog-logger "from cl")
  • 8. もう一度ビッグデータ ところでビッグデータで何したいの? もちろん、解析。
  • 9. ログのありかた ● × 人間が読み易い形式 ● ○ 機械が読んで人間に分かり易く出力できる形 式 1.機械が読んで 2.出力する 割と面倒
  • 10. それっぽいデータ吐くから誰か解析して 任せろ!
  • 11. Fluentdについて ● ログ解析フレームワーク ● Ruby製、gemで入る ● 様々な入力を – ● 今回はCommon Lispから 様々に出力する – MongoDBに保存 – トラフィックを監視 – グラフ化などなど
  • 12. fluentdのプロトコル ● ● ● データは <time> <tag> <json>の形式 json→ログが構造化される(機械に扱いやす い) 標準でtail -F, HTTP, TCPなどでデータを渡せる Log4CLからこの形式でデータを 吐ければ幸せになれるのでは?
  • 13. 作ってみた ● https://github.com/KeenS/log4cl-fluentd ● TCP, HTTP, tail -Fのどれで渡すか選べる ● 一応log4clのプラグインの形だが使い勝手が違 う。 – ● ログメッセージにJSON形式のデータを要求するな ど <demo3>
  • 14. ところで ● 「ビッグ」データを作るには? – →やっぱWebアプリケーションでしょ – →てことは… Clack!!
  • 15. Clack+Log4CL+fluentd? ● まあ、普通に使えば動く ● でも、もっとカジュアルに Access Logが望まれている…?
  • 16. Clack.Middleware.AccessLog4CLack ● 作りました – ● ● ● 正確には動くかどうか実験しました https://github.com/KeenS/clack のそれっぽいブラ ンチ参照 だいたいリクエストヘッダからできてる`env`と レスポンスタイムを吐く demo?
  • 17. ベンチマークしてみた ● ab -c 10 -n 1000 localhost:5000/ (defun app (env) ● (declare (ignore env)) '(200 (:content-type "text/plain") ("Hello, Clack!"))) • Requests per second: • • • forward Requests per second: • 136.72 [#/sec] (mean) http Requests per second: • 156.03 [#/sec] (mean) なし 1009.76 [#/sec] (mean)
  • 18. 今後の課題 ● とりあえず「まともに動く」レベルにもっていく ● ドキュメントとか ● てか、遅い ● 使い勝手とか? ● 拡張性? ● そもそも需要ある?
  • 19. まとめ ● Common LispでログとるならLog4CL ● それにfluentdつけてみた ● さらにclackで動かしてみた ● 調子乗りましたごめんなさい 以上です