nigoblog

技術系会社のCEOブログ~私的編~

ビッグデータ取り扱いまでの流れ1 収集編

最近ビッグデータを取り扱ってきているので、その流れを記録しようかと思います。
Ruby on Railsで構築していますが、一部以外は別の言語やフレームワークでも利用できます。

ビッグデータの定義ですが、この本の帯の「データサイズが悩みの種ならそれはもうビッグデータです」

Hadoopファーストガイド

Hadoopファーストガイド

っていうのがすごくしっくりきました。

丁度データサイズに悩み始めてきたため、ビッグデータを取り扱っているといえるでしょう。

ざっくりとした流れは

  1. fluentdのインストール
  2. td-loggerでアプリケーションログの吐き出し
  3. td-loggerで受け取ったログをS3に送信
  4. S3のデータをHadoopで解析
  5. Hadoopで解析したデータをRDSに突っ込む

というような流れとなっております。

fluentdのインストール

これはいろんなところで書いてあるのであまり深くは書きませんが、
こんな感じでインストールします。

/etc/yum.repos.d/td.repo

[treasuredata]
name=TreasureData
baseurl=http://packages.treasure-data.com/redhat/$basearch
gpgcheck=0
$ yum update
$ yum install td-agent

td-loggerでアプリケーションログの吐き出し

Gemfileにて

gem 'td-logger'

を追加しbundle install

ファイル
config/treasure_data.yml

development:
  agent: localhost:24224
  tag: アプリケーション名
  debug_mode: true  # enable debug mode

production:
  agent: localhost:24224
  tag: アプリケーション名
  debug_mode: false

# disable logging
test:

を追加

取得したい場所に

TD.event.post('[タグの名前]', ハッシュ)

するとログでは

datetime アプリケーション名.タグの名前 json

みたいな感じです。具体的に入れると

TD.event.post('test', { hoge: :piyo })

アプリケーション名をmy_appとするとログは

2014-03-29T00:40:11+09:00	my_app.test	{"hoge":"piyo"}

みたいな感じになります。

td-loggerで受け取ったログをS3に送信

次は

2014-03-29T00:40:11+09:00	my_app.test	{"hoge":"piyo"}

こちらのログをS3に入れます。

設定ファイルに次の設定を追加します
/etc/td-agent/td-agent.conf

<match my_app.event>
  type s3
  aws_key_id AWSのキー
  aws_sec_key AWSのシークレットキー
  s3_bucket バケット名
  s3_endpoint S3のリージョン.amazonaws.com
  s3_object_key_format %{path}%{time_slice}_%{index}_%{hostname}.%{file_extension}
  path events/
  buffer_path /var/log/fluentd/events_s3
  time_slice_format %Y-%m-%d/%H
  time_slice_wait 10m 
</match>

これでオッケー。
あとはしばらく動かして、バケットの中身を見ると、gzip形式のファイルがどんどん溜まっていきます。
それをhadoopで処理します。

動いてないと思ったら

tail -f /var/log/td-agent/td-agent

などでログを見て行きましょう。

というわけで今回はここまで。
次回はhadoopで処理する方法を書いていきます。

参考記事

fluentd+rails+mongoでサクッとログ環境を整備してみる - dev.log

データサイエンティスト養成読本 [ビッグデータ時代のビジネスを支えるデータ分析力が身につく! ] (Software Design plus)

データサイエンティスト養成読本 [ビッグデータ時代のビジネスを支えるデータ分析力が身につく! ] (Software Design plus)