20130927 adstir emr

1,266 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,266
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
7
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

20130927 adstir emr

  1. 1. Copyright © UNITED, Inc. All Rights Reserved.Copyright © UNITED, Inc. All Rights Reserved. AdStir SSP(RTB)を支える集計インフラの変遷 1 2013.09.27
  2. 2. Copyright © UNITED, Inc. All Rights Reserved. 自己紹介 • @fukata (github: fukata) • ログ周り, バッチ系 • Fluentd, EMR • Perl, Ruby, Go • 食べ歩き, 写真 2
  3. 3. Copyright © UNITED, Inc. All Rights Reserved. アジェンダ • UNTIED, inc • AdStir • 集計インフラの変遷 • TODO 3
  4. 4. Copyright © UNITED, Inc. All Rights Reserved. UNITED, inc. 4
  5. 5. Copyright © UNITED, Inc. All Rights Reserved. CocoPPa 5
  6. 6. Copyright © UNITED, Inc. All Rights Reserved. AdStir 6
  7. 7. Copyright © UNITED, Inc. All Rights Reserved. SSP 7 自社広告 AdStir公認アドネットワーク 他社アドネットワーク 配分比率(%)に応じて抽選 RTB 自社広告 RTB 公認 在庫切れの場合, 再抽選 他社 Browser 他アドネットワークAdStir
  8. 8. Copyright © UNITED, Inc. All Rights Reserved. RTB 8 AdStir DSPs 50ms DSP A DSP B DSP C オークション bid bid bid bid Browser
  9. 9. Copyright © UNITED, Inc. All Rights Reserved. ログ • 1,000,000,000 レコード / 日 • 800 GB(非圧縮) / 日 9
  10. 10. Copyright © UNITED, Inc. All Rights Reserved. 集計インフラ(2011) 10
  11. 11. Copyright © UNITED, Inc. All Rights Reserved. 集計インフラ(2011) 11 rsync perlスクリプトで集計 AD (syslog) AD (syslog) Batch mysql
  12. 12. Copyright © UNITED, Inc. All Rights Reserved. 問題点 1 • ログファイルが日別 • ログファイルが単一サーバに集中 • rsyncがこけた時のリカバリーが手動 • 集計がスケールしにくい・・・ 12
  13. 13. Copyright © UNITED, Inc. All Rights Reserved. 問題点 2 • 物理サーバ • 急なリクエスト増加に対応できない • 一度増やすと簡単にサーバ減らせない • 回線使用料がランニングコストの1/3 13
  14. 14. Copyright © UNITED, Inc. All Rights Reserved. 集計インフラ(2013.04) 14
  15. 15. Copyright © UNITED, Inc. All Rights Reserved. 集計インフラ(2013.04) 15 fluentd fluentd Batch AD (fluentd) AD (fluentd) fluentd logslogslogs ELB perl logs/YYYY/MM/DD/HH/${tag}.log.0.gz S3 mysql
  16. 16. Copyright © UNITED, Inc. All Rights Reserved. 問題点 1 • ログファイルが日別 => 時間別に変更 • ログファイルが単一サーバに集中 • rsyncがこけた時のリカバリーが手動 => fluentdで解決! • 集計がスケールしにくい・・・ 16
  17. 17. Copyright © UNITED, Inc. All Rights Reserved. 問題点 2 • 物理サーバ => EC2 • 急なリクエスト増加に対応できない => 5分程度で追加・投入可能 • 一度増やすと簡単にサーバ減らせない => インスタンスをストップするだけ • 回線使用料がランニングコストの1/3 => 使った分だけ(従来の1/5くらい) 17
  18. 18. Copyright © UNITED, Inc. All Rights Reserved. 集計インフラ(現在) 18
  19. 19. Copyright © UNITED, Inc. All Rights Reserved. 集計インフラ(現在) 19 fluentd fluentd AD (fluentd) AD (fluentd) ELB Cluster EMR Batch logs/YYYY/MM/DD/HH/${tag}.log.0.gz S3 Cluster mysql
  20. 20. Copyright © UNITED, Inc. All Rights Reserved. 問題点 • ログファイルが単一サーバに集中 => S3にのみアップすることで解決 • 集計がスケールしにくい・・・ => EMR!! 20
  21. 21. Copyright © UNITED, Inc. All Rights Reserved. EMR • すぐに使い始められる • クラスタ規模も簡単に変更できる • クラスタのメンテコスト削減 • 1日以上かかっていた集計が2時間弱で 終わるようになった 21
  22. 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/file1 --output s3n://BUCKET/path/to/output
  23. 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/file1 --output s3n://BUCKET/path/to/output
  24. 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 --jobflow JOBFLOW_ID --stream --mapper s3n://BUCKET/path/to/mapper.py --reducer s3n://BUCKET/path/to/reducer.py --input s3n://BUCKET/path/to/file1 --output s3n://BUCKET/path/to/output
  25. 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/file1 --output s3n://BUCKET/path/to/output
  26. 26. Copyright © UNITED, Inc. All Rights Reserved. elastic-mapreduceコマンド • 結構色んな事が出来る • オプションが大量にある • Ruby 1.8系までしか対応してない 26
  27. 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. 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
  29. 29. Copyright © UNITED, Inc. All Rights Reserved. TODO 29
  30. 30. Copyright © UNITED, Inc. All Rights Reserved. TODO • hive • streamingでmapper/reducerそれぞれを実装するのが怠い • アドホックなクエリを気軽に実行できる • ログデータの中間処理 • 検証では4倍ほど速くなった • job監視・可視化 • ステータス、実行時間 等 30
  31. 31. Copyright © UNITED, Inc. All Rights Reserved. Thank you 31
  32. 32. Copyright © UNITED, Inc. All Rights Reserved. Recruit • http://united.jp/recruit/ • SSP, RTB配信エンジン, 集計インフラを一 緒に作りませんか?(広告に興味なく ても大丈夫です) • go書きたい人 32

×