15. Copyright ? UNITED, Inc. All Rights Reserved.
集計インフラ(2013.04)
15
?uentd
?uentd
Batch
AD
(?uentd)
AD
(?uentd)
?uentd
logslogslogs
ELB
perl
logs/YYYY/MM/DD/HH/${tag}.log.0.gz
S3
mysql
16. Copyright ? UNITED, Inc. All Rights Reserved.
問題点 1
? ログファイルが日別
=> 時間別に変更
? ログファイルが単一サーバに集中
? rsyncがこけた時のリカバリーが手動
=> ?uentdで解決!
? 集計がスケールしにくい???
16
17. Copyright ? UNITED, Inc. All Rights Reserved.
問題点 2
? 物理サーバ => EC2
? 急なリクエスト増加に対応できない
=> 5分程度で追加?投入可能
? 一度増やすと簡単にサーバ減らせない
=> インスタンスをストップするだけ
? 回線使用料がランニングコストの1/3
=> 使った分だけ(従来の1/5くらい)
17
19. Copyright ? UNITED, Inc. All Rights Reserved.
集計インフラ(現在)
19
?uentd
?uentd
AD
(?uentd)
AD
(?uentd)
ELB
Cluster
EMR
Batch
logs/YYYY/MM/DD/HH/${tag}.log.0.gz
S3
Cluster
mysql
20. Copyright ? UNITED, Inc. All Rights Reserved.
問題点
? ログファイルが単一サーバに集中
=> S3にのみアップすることで解決
? 集計がスケールしにくい???
=> EMR!!
20
21. Copyright ? UNITED, Inc. All Rights Reserved.
EMR
? すぐに使い始められる
? クラスタ規模も簡単に変更できる
? クラスタのメンテコスト削減
? 1日以上かかっていた集計が2時間弱で
終わるようになった
21
22. Copyright ? UNITED, Inc. All Rights Reserved.
JOB FLOWの起動
22
$ elastic-mapreduce --create
--stream
--mapper s3n://BUCKET/path/to/mapper.py
--reducer s3n://BUCKET/path/to/reducer.py
--input s3n://BUCKET/path/to/?le1
--output s3n://BUCKET/path/to/output
23. Copyright ? UNITED, Inc. All Rights Reserved.
デバッグ用オプション
23
$ elastic-mapreduce --create
--keypair KEYPAIR_NAME
--enable-debugging
--log-uri s3n://BUCKET/path/to/debug
--stream
--mapper s3n://BUCKET/path/to/mapper.py
--reducer s3n://BUCKET/path/to/reducer.py
--input s3n://BUCKET/path/to/?le1
--output s3n://BUCKET/path/to/output
24. Copyright ? UNITED, Inc. All Rights Reserved.
JOB FLOWの永続化
24
$ elastic-mapreduce --create
--alive
--keypair KEYPAIR_NAME
--enable-debugging
--log-uri s3n://BUCKET/path/to/debug
$ elastic-mapreduce --job?ow JOBFLOW_ID
--stream
--mapper s3n://BUCKET/path/to/mapper.py
--reducer s3n://BUCKET/path/to/reducer.py
--input s3n://BUCKET/path/to/?le1
--output s3n://BUCKET/path/to/output
25. Copyright ? UNITED, Inc. All Rights Reserved.
実際のオプション例
25
$ elastic-mapreduce --create
--name JOBFLOW_NAME
--keypair KEYPAIR_NAME
--enable-debugging
--log-uri s3n://BUCKET/path/to/debug
--num-instances 5
--master-instance-type m1.large
--slave-instance-type c1.medium
--stream
--jobconf stream.recordreader.compression=gzip
--mapper s3n://BUCKET/path/to/mapper.py
--reducer s3n://BUCKET/path/to/reducer.py
--input s3n://BUCKET/path/to/?le1
--output s3n://BUCKET/path/to/output
26. Copyright ? UNITED, Inc. All Rights Reserved.
elastic-mapreduceコマンド
? 結構色んな事が出来る
? オプションが大量にある
? Ruby 1.8系までしか対応してない
26
27. Copyright ? UNITED, Inc. All Rights Reserved.
スクリプトでラップ
27
$ perl script/batch EMR::JobRegister
--func rtb_report
--from ‘2013-09-27 13:00:00’
--to ‘2013-09-27 14:00:00’
28. Copyright ? UNITED, Inc. All Rights Reserved.
出力
28
elastic-mapreduce --create
--name RtbReport
--keypair KEYPAIR_NAME
--enable-debugging
--log-uri s3n://BUCKET/debug/2013/09/27/rtb_report_140000
--num-instances 5
--master-instance-type m1.large
--slave-instance-type c1.medium
--stream
--jobconf stream.recordreader.compression=gzip
--mapper s3n://BUCKET/streaming/rtb_report/mapper.py
--reducer s3n://BUCKET/streaming/rtb_report/reducer.py
--input s3n://BUCKET/logs/2013/09/27/13/bid.*, s3n://BUCKET/logs/2013/09/27/13/
impression.*, s3n://BUCKET/logs/2013/09/27/13/click.*
--output s3n://BUCKET/output/2013/09/27/rtb_report_140000
30. Copyright ? UNITED, Inc. All Rights Reserved.
TODO
? hive
? streamingでmapper/reducerそれぞれを実装するのが怠い
? アドホックなクエリを気軽に実行できる
? ログデータの中間処理
? 検証では4倍ほど速くなった
? job監視?可視化
? ステータス、実行時間 等
30
32. Copyright ? UNITED, Inc. All Rights Reserved.
Recruit
? http://united.jp/recruit/
? SSP, RTB配信エンジン, 集計インフラを一
緒に作りませんか?(広告に興味なく
ても大丈夫です)
? go書きたい人
32