Treasure Data でモテモテ
はじめまして。 Crocosの平均年齢引き上げ担当の @cocoitiban こと新井です。 最近、結婚いたしましたので、一つ前の記事を参考に、妻に旧姓表示を教えたいと思います。
さて、以前弊社 CTO の sotarok の記事で、Crocos の技術基盤について説明があったとおもいますが、ちょっと深く掘り下げてご紹介したいと思います。 まずは、僕が入社して一番インパクトがあった Treasure Data について説明したいと思います。
どんなものか
sotarok の Crocos を支える技術でも紹介されていますが改めて紹介すると、大量のデータ解析ができるPaaSのサービスです。
fluentdと一瞬で組み合わせて使える
HiveQLでクエリを実行できる
データもTreasure Data側に保持しておける(こちら今サイトみると500GBまでは気にしないでいいみたいですね)
弊社では主にアクセスログの解析で利用しています。PHPのアプリ上で各種ログデータを生成して送信していますが、Apacheのログ等も簡単に変換して登録することが可能です。
ざっくりとですが、用語について説明します。
fluentd
fluentd ログ転送デーモンで、Scribeとかそういったのもそれなり有名なのではないでしょうか。 CPU負荷やネットワークトラフィックもWebサーバに入れている限りは考慮しなくていいレベルで、今のところCrocosで使っている限りは安定しているようです。
プラグインでいろいろできますので、たとえば、AmazonDynamoDB に送信するといったことも非常に簡単にできます。
Hive
目のいっちゃってるぞうさんでお馴染みの Hadoop でデータ解析をするための SQL ライクな構文をが使える命令群です。使っていて、基本的にSQLがわかるエンジニアならコツがわかれば、半日くらいで使いこなせた気分になります。
大量データを、「え?本当に」って速度で処理してくれます。 ところでどうでもいいのですが、Hive になるとさらにぞうさんいっちゃってますね。
そんなわけで、実はこの Treasure Data、実はもうすでに使えるようです。 もし私が Crocos のエンジニアではなくて個人でサイトをつくっていても、使ってみようと思えますしなにより、30分くらいあればその凄さを体感できますので、ぜひ試していただきたいです。
というわけで、少しチュートリアルにそった使い方を説明していきたいとおもいます。
導入方法
Treasure Data の Quickstart Guideに沿って進めたいとおもいます。
アカウントの新規作成
Sign Upページより登録します。
2012/07/12現在は、Quickstart Guide のリンクは間違ってるみたいです。
ちなみにここで書いたパスワード忘れないように注意してください。 しばらくすると登録メールが届きますので、指示にしたがって登録をしてください。
インストール
指示にしたがってインストールしてください。 手元の環境のMacでは何もはまるところなくパッケージでインストールできました。
そうするとtdコマンドが利用できるようになります。 その後、 アカウント認証をします。 ここらへんは、先ほどのQuickStartの指示そのままで問題ありません。
td account -f
でメールアドレスとパスワードを聞かれますのでそれを入力してください。
データベースの新規作成
これまた、QuickStartそのままで問題ありません。
td db:create testdb
td table:create testdb www_access
実際に使ってみる
これもまた。QuickStartの内容そのままで問題ありません。 親切なマニュアルがあるので楽ですね! まずデータ登録をします。
$ td sample:apache apache.json
$ td table:import testdb www_access --json apache.json
$ tail -n 1 apache.json
なんと、tdコマンドにはテスト用のjsonを作成するようなそんな機能があります。 データが登録できたらクエリを実行します。
$ td query -w -d testdb \
"SELECT v['code'], COUNT(1) FROM www_access GROUP BY v['code']"
JSONの中身はそれぞれ、vという変数の中に入っていて、v['hoge']という感じで項目名を指定します。
しばらくすると値が返ってきます。簡単ですね!!
HiveのクエリはHive Tutorialを参考にするととっつきやすいです。
駆け足ですが、おそらく、一回触ってみるとなんとなくコツがつかめると思います。
よく使う機能
@Result Outputという機能が結構面白いです。
クエリを実行した結果を、自分たちで構築したデータベースに登録してくれる機能です。 自分たちで用意した場合バッチサーバを用意して、そこから、クエリの結果をデータベースに登録することになるので、サーバ一台用意しなくていい分非常に簡単です。
いくらTreasure Dataが高速とはいえ、ユーザに直接触れるところにおくのはレスポンス的には問題がありますのでいったん、自分たちのデータベースに格納してからユーザに表示するということは良いことです。
終わりに
これ、ある程度大きい会社だと結構似たような技術を利用できるのですが、個人で構築するのは結構大変なんじゃないかと思います。
それがこんなに簡単に利用できるようになるとは思いませんでした。
こういったものを使ったことがあるというのはそれはそれでひとつのスキルといえると思いますし、一般的な技術を使っていますので、いろいろ問題を解決しやすいというメリットもあると思います。
次回は、Webアプリケーションから Fluent を経由しログを投げる方法や、Crocos内部にてどのように使っているかを簡単に説明したいと思います。 本記事がご参考になれば幸いです。









