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

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

on

  • 666 views

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

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

Statistics

Views

Total Views
666
Views on SlideShare
591
Embed Views
75

Actions

Likes
0
Downloads
1
Comments
0

3 Embeds 75

http://keens.github.io 64
http://localhost 10
http://www.feedspot.com 1

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • Common Lispでビッグデータを作ろ う Lisp Meet Up #10 κeen(@blackenedgold)
  • 自己紹介 ● κeen ● 数学科生の就活生 ● Common Lisp, Ruby, Emacs Lispな人 ● @blackenedgold ● http://keens.github.io ● 就活生
  • ビッグデータとは? ● 定義は色々 ● 「アプリケーションの吐き出す大量のデータ」 ● ビッグデータを作る=アプリにデータを吐かせ る という訳で今回はログの話をします タイトルは釣りでした View slide
  • Log4CL ● ● ● ● CLikiのCurrent recommended librariesにある 高速かつカスタマイザブルな 出力 JavaのLog4Jを参考に作られた ユーザーフレンドリーなイン ターフェース View slide
  • 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>
  • 論理出力先 もうちょっと詳しく logger category App 物理出力先 物理出力先 appender appender layout layout ファイル コンソール
  • (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")
  • もう一度ビッグデータ ところでビッグデータで何したいの? もちろん、解析。
  • ログのありかた ● × 人間が読み易い形式 ● ○ 機械が読んで人間に分かり易く出力できる形 式 1.機械が読んで 2.出力する 割と面倒
  • それっぽいデータ吐くから誰か解析して 任せろ!
  • Fluentdについて ● ログ解析フレームワーク ● Ruby製、gemで入る ● 様々な入力を – ● 今回はCommon Lispから 様々に出力する – MongoDBに保存 – トラフィックを監視 – グラフ化などなど
  • fluentdのプロトコル ● ● ● データは <time> <tag> <json>の形式 json→ログが構造化される(機械に扱いやす い) 標準でtail -F, HTTP, TCPなどでデータを渡せる Log4CLからこの形式でデータを 吐ければ幸せになれるのでは?
  • 作ってみた ● https://github.com/KeenS/log4cl-fluentd ● TCP, HTTP, tail -Fのどれで渡すか選べる ● 一応log4clのプラグインの形だが使い勝手が違 う。 – ● ログメッセージにJSON形式のデータを要求するな ど <demo3>
  • ところで ● 「ビッグ」データを作るには? – →やっぱWebアプリケーションでしょ – →てことは… Clack!!
  • Clack+Log4CL+fluentd? ● まあ、普通に使えば動く ● でも、もっとカジュアルに Access Logが望まれている…?
  • Clack.Middleware.AccessLog4CLack ● 作りました – ● ● ● 正確には動くかどうか実験しました https://github.com/KeenS/clack のそれっぽいブラ ンチ参照 だいたいリクエストヘッダからできてる`env`と レスポンスタイムを吐く demo?
  • ベンチマークしてみた ● 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)
  • 今後の課題 ● とりあえず「まともに動く」レベルにもっていく ● ドキュメントとか ● てか、遅い ● 使い勝手とか? ● 拡張性? ● そもそも需要ある?
  • まとめ ● Common LispでログとるならLog4CL ● それにfluentdつけてみた ● さらにclackで動かしてみた ● 調子乗りましたごめんなさい 以上です