Jenkinsとhadoopを利用した継続的データ解析環境の構築

11,398 views
11,155 views

Published on

Published in: Technology
0 Comments
51 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
11,398
On SlideShare
0
From Embeds
0
Number of Embeds
2,111
Actions
Shares
0
Downloads
0
Comments
0
Likes
51
Embeds 0
No embeds

No notes for slide

Jenkinsとhadoopを利用した継続的データ解析環境の構築

  1. 1. 継続的データ解析環境の構築 株式会社adingo エンジニア 鈴木健太
  2. 2. Meta Information• 2006.4 – 2012.3 – Keio University • Artificial Intelligence, Semantic Web, Ontology Engineering• 2011.2 – 2012.3 – CTO at Trippiece, Inc. • Software Engineering• 2012.4 – – Engineer at adingo, Inc. • Data Analysis, Operation Engineering twitter: @suzu_v http://blog.kentasuzuki.net
  3. 3. 継続的なデータ解析の話をします。
  4. 4. 今はこんな業務をしています。Web広告の技術をCRMに取り入れ、各クライアント様のデータを収集・分析した上で効果や現状を分かりやすく示し、LTVの引き上げを行うツールです。 http://cosmi.io
  5. 5. 基本的な解析のやり方として• 定点観測 – 年、月、週、日、時間、分、秒 – 毎日見ているから気がつくことがある• アドホック – 何か仮説がある場合に、深掘りしていく。
  6. 6. 検討計測 仮説 実装
  7. 7. 解析をする上での悩みがあります。 http://www.flickr.com/photos/darwinbell/5827849044/sizes/o/in/photostream/
  8. 8. それは考える時間が減っていく事です。
  9. 9. 検討計測 仮説 実装
  10. 10. ある日急に、「ごめん、明日までにAサイトのB商品 の購買動向について詳細教えてくれる?30代男性のあるクラスタに属性しているユーザが大量に購入しているみ たいなんだよね。」 という依頼が来る。
  11. 11. Audience Data +Data of Service http://www.flickr.com/photos/chef_ele/3791289276/sizes/l/in/photostream/
  12. 12. 枠から人へ 性別 年齢 居住 ? 職業 興味 趣向 http://www.flickr.com/photos/catikaoe/232832224/sizes/o/in/photostream/
  13. 13. LOG impression click conversionログにはいくつかの種類があります。 フォーマットが違います。
  14. 14. 毎秒 様々なスパンでログと向き合います。毎分毎時 months毎日 weeks毎週 days毎月 hours minuteshttp://www.flickr.com/photos/gadl/284995199/sizes/o/in/photostream/ seconds
  15. 15. Log: X0GB / dayコンスタントにログが増えていきます。
  16. 16. ログの向こう側を見る http://www.flickr.com/photos/eole/1394588888/sizes/o/in/photostream/
  17. 17. 環境の変化に対応しよう。より柔軟に解析できる環境を作ろう。
  18. 18. 検討計測 仮説 実装
  19. 19. Infrastructure of cosmi
  20. 20. 大まかな要件• スケールが容易なログコレクタ• どんなスキーマが来ても分析容易性を確 保• 安定したオーディエンスデータの提供
  21. 21. Adnetworks media Web Sites SSP DSP 行動ログ Amazon Elastic Load Balancing行動ログコレクタ(Web) オーディエンスデータ Web API … … EC2 EC2 EC2 EC2 EC2 EC2 Auto scaling Group Auto scaling Group Amazon Simple Amazon Elastic オーディエンスデータDB Storage Service MapReduce (MongoDB) (S3) ログ解析バッチ http://aws.amazon.com/jp/solutions/case-studies/adingo/
  22. 22. AWSを採用した理由(解析視点)安定したストレージS3 -> Elastic MapReduce連携が便利分析するデータ量が増えてもスケールが 容易
  23. 23. 実際のログ解析
  24. 24. ログ解析にはApache Hiveを 採用しました。
  25. 25. 検討計測 仮説 実装
  26. 26. -- EX.) schema of access logCREATE EXTERNAL TABLE access_log ( stamp bigint, ipaddress string, request_status string, latency string, user_agent string, referer string, response_out_byte int, input_byte int, connection string, status string)PARTITIONED BY (dt string)STORED AS SEQUENCEFILELOCATION s3n://sample-bucket/access_log/; ひと目でスキーマがわかります。
  27. 27. -- defining table for output daily referer count by pages.CREATE EXTERNAL TABLE daily_referer_count ( referer string, referer_count int)ROW FORMAT DELIMITED FIELDS TERMINATED BY tSTORED AS TEXTFILELOCATION s3n://sample-bucket/reports/${EVENTDATE}/daily_referer_count_ranking’;例えばアクセスログからリファラを分析する際には上のようなテーブルを作り、
  28. 28. 集計します。この場合だと、結果はS3に格納されます。-- aggregation daily count of each referer.INSERT OVERWRITE TABLE daily_referer_countSELECT referer, count(*) AS referer_count FROMaccess_log WHERE dt="${EVENTDATE}"GROUP BY refererDISTRIBUTE BY referer SORT BY referer_count DESC,referer ASCLIMIT 100;
  29. 29.  導入の敷居低い 何をしているのか一目で分かる
  30. 30. これで手軽にデータについて調べることが できます。あとはこれを継続して回すことが大事です。
  31. 31. 検討計測 仮説 実装
  32. 32. 解析を継続するために必要なこと 解析までのリードタイムを短くする 気軽に解析バッチを実行できるようにする 失敗してもすぐに再実行できる
  33. 33. Deployment & Running Batch with Jenkins
  34. 34. 解析にもJenkinsを• Jenkinsの特徴 – インストール、セットアップが簡単 – ジョブ設定、通知が容易 • 「何が起こった時に何をして何を通知するか」 – プラグイン拡張• Jenkinsの主な役割 – 継続的なビルド及びテスト – 外部ジョブの監視 Welcome to Jenkins CI! | Jenkins CI http://jenkins-ci.org/
  35. 35. Jenkinsをフル活用しています ログコレクタとオーディエンスデータAPIの継続 的デリバリ MapReduce用Javaプログラムのテスト・ビル ド・s3への配置・実行 Hiveスクリプトのs3への配置・実行
  36. 36. $ vim apps/hoge/output_log_format$ git commit –m“#123 ログスキーマを変更”$ git push origin master push Team
  37. 37. push Team mirroringgithubにコードがpushされると、ローカルのmirrorリポジトリにfetchします。初期化時$ git clone --mirror git@github.com:hoge/repos.git更新時$ git remote update
  38. 38. push Team mirroring :release ビ ル ド パ イ プ ラ イ ン :masterJenkinsにはビルドパイプラインが構築してあり、これによってジョブフローを制御しています。また、ブランチごとにデプロイ先を変えています。
  39. 39. pushTeam mirroring :release ビ ル ド パ イ プ ラ イ ン development :master EC2 開発環境にはmasterブランチのコードが 自動的にデプロイされます。 この際テストやマイグレーションなども 同時に行われます。 $ fab –f app_fabfile.py development deploy testing migrate
  40. 40. push production …Team mirroring EC2 EC2 EC2 :release Auto scaling Group ビ preview ル ド パ イ プ EC2 ラ AWS CloudFormation イ ン development :master EC2 Servers belonged to certain data domain.pre環境は都度CloudFormationで立ち上げます。本番環境にはreleaseブランチのコードをデプロイします。 $ fab –f app_fabfile.py preview deploy migrate $ fab –f app_fabfile.py production deploy migrate
  41. 41. push production …Team mirroring EC2 EC2 EC2 :release Auto scaling Group ビ preview ル ド パ イ プ EC2 ラ AWS CloudFormation イ ン development :master EC2 Servers belonged to certain data domain. .jarファイルやhiveプログラムの配置 S3もし、MapReduceプログラムやHiveクエリであれば、ビルド後の成果物をS3に自動的に配置します。$ s3cmd put --recursive /path/to/workspace/* s3://example/hive/
  42. 42. push production …Team mirroring EC2 EC2 EC2 :release Auto scaling Group ビ preview ル ド パ イ プ EC2 ラ AWS CloudFormation イ ン development :master EC2 Servers belonged to certain data domain. .jarファイルやhiveプログラムの配置 そして実際にジョブを実行します。 S3 ジョブの実行は任意のタイミング で行うことができます。 ジョブの実行 $ TODAY=`date +%Y/%m/%d` $ elastic-mapreduce --create –name LogAggregation --num-instances 10 --instance-type m1.small --hive-script --arg s3://example/hive/query/1st_step.q Amazon Elastic MapReduce --args -d,EVENTDATE=$TODAY --step-name FirstStep --hive-script --arg s3://example/hive/query/2nd_step.q --args -d,EVENTDATE=$TODAY --step-name SecondStep
  43. 43. 検討計測 仮説 実装
  44. 44. しかしやはり、人間、失敗をします。 http://www.flickr.com/photos/proimos/4199675334/sizes/o/in/photostream/
  45. 45. 検討! 計測 仮説 実装失敗したらすぐに修正したいものです。失敗したことを、すぐに知ることが大事です。
  46. 46. そんなときは、Jenkinsが教えてくれます。
  47. 47. ./elastic-mapreduce Amazon Elastic MapReduceMapReduceジョブの実行をまず、Jenkinsから行います。これは定期的に実行されます。
  48. 48. ./elastic-mapreduce Amazon Elastic MapReduce Trigger Parameterized Buildparam:job_id ジョブ実行後、job_idをパラメータとして渡し、 新たなジョブを実行します。
  49. 49. ./elastic-mapreduce Amazon Elastic MapReduce Trigger Parameterized Buildparam:job_id monitoring state of the job 新しいジョブによってMapReduceジョブを監視します。
  50. 50. ./elastic-mapreduce FAILED. Amazon Elastic MapReduce Trigger Parameterized Buildparam:job_id monitoring state of the job 仮にここで、ジョブが何らかの原因で失敗したとします。
  51. 51. ./elastic-mapreduce FAILED. Amazon Elastic MapReduce Trigger Parameterized Buildparam:job_id Getting Log 監視ジョブが失敗したことを検知し、 Elastic MapReduceからapi経由でログを取得します。
  52. 52. ./elastic-mapreduce Amazon Elastic MapReduce Trigger Parameterized Buildparam:job_id Getting Logmail, IRC, etc.including the log. ジョブが失敗したことを様々な方法で通知します。 この際にログ自体も送ります。
  53. 53. 検討!計測 仮説 実装
  54. 54. 発表のまとめをします。
  55. 55. 時間は限られています。 しかし、 調べたいことは山積み。http://www.flickr.com/photos/bogenfreund/556656621/sizes/o/in/photostream/
  56. 56. 1人で解析するのではなく、周りのメンバーを巻き込みましょう。誰もがデータについて考えられるような環境を作りましょう。
  57. 57. しかしやはり、人間、失敗をします。 http://www.flickr.com/photos/proimos/4199675334/sizes/o/in/photostream/
  58. 58. なので道具を活かしましょう。
  59. 59. 考える時間を作りましょう。 http://www.flickr.com/photos/darwinbell/5827849044/sizes/o/in/photostream/
  60. 60. データを観察し、想像しましょう。角度を変えて、繰り返し繰り返し考えましょう。 http://www.flickr.com/photos/srtagomez/5416367341/sizes/l/in/photostream/
  61. 61. 検討 計測 仮説 実装素早く回し、調べ、考え、またすぐに試しましょう。継続的な解析ができる環境をつくりましょう。
  62. 62. 解析にも継続的デリバリを http://www.flickr.com/photos/columna/236353428/sizes/l/in/photostream/
  63. 63. 参考資料
  64. 64. Jenkinsについて• Welcome to Jenkins CI! | Jenkins CI – http://jenkins-ci.org/ – 公式サイトです。• Parameterized Build - Jenkins - Jenkins Wiki – https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Build – パラメータをジョブに渡して実行する方法について書かれています。• Parameterized Trigger Plugin - Jenkins - Jenkins Wiki – https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin – パラメータをジョブからジョブに渡して実行するためのプラグインです。MapReduceジョブの監視のためにjob_idを 渡す際にはこれを利用して監視用ジョブを立ち上げています。• Build Pipeline Plugin - Jenkins - Jenkins Wiki – https://wiki.jenkins-ci.org/display/JENKINS/Build+Pipeline+Plugin – ビルドパイプラインを構築するためのプラグインです。ジョブの一連の流れを設定するために利用しています。基本 的にデプロイやMapReduceに関するジョブについてはgit commitを起点としたパイプラインに配置するようにしてい ます。• IRC Plugin - Jenkins - Jenkins Wiki – https://wiki.jenkins-ci.org/display/JENKINS/IRC+Plugin – IRCによる通知のためのプラグインです。• Email-ext plugin - Jenkins - Jenkins Wiki – https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin – Jenkinsによるメール通知の機能を拡張するプラグインです。• OReilly Japan - Jenkins – http://www.oreilly.co.jp/books/9784873115344/ – オライリー・ジャパンから出版されているJenkins本です。Parameterized Triggerの設定の際に参考にしました。
  65. 65. Elastic MapReduceについて• Amazon Elastic MapReduce Ruby Client : Developer Tools : Amazon Web Services – http://aws.amazon.com/developertools/2264 – 全てのジョブのコントロールはコマンドラインツールを利用していま す。Jenkinsからのディスパッチについてもこれを利用しています。• Running Hive on Amazon Elastic MapReduce : Articles & Tutorials : Amazon Web Services – http://aws.amazon.com/articles/2857 – Elastic MapReduce上でのHiveの利用に関する資料がまとまっています。• Contextual Advertising using Apache Hive and Amazon EMR : Articles & Tutorials : Amazon Web Services – http://aws.amazon.com/articles/2855 – Hiveによる分析の実例が示されています。一連の流れが書かれている ので、実際に試して見る場合には参考になると思います。
  66. 66. Apache Hiveについて• Programming Hive - OReilly Media – http://shop.oreilly.com/product/063692002355 5.do – Hiveに関する仕様がよくまとまっています。 もちろんWeb上やJIRAで参照できる内容がほ とんどですが、手元においておくと安心です。
  67. 67. Fabricについて• Github: fabric/fabric – https://github.com/fabric/fabric – デプロイにはfabricを利用しています。python 製のデプロイツールです。• Fabric documentation – http://docs.fabfile.org/ – 公式のドキュメントです。やはりここが一番 情報が多いです。ただ実践的にどのように使 うか、という点に関しては情報がまだまだ少 ないです。
  68. 68. cosmi Relationship Suiteについて• adingo、ディスプレイ広告枠活用型のCRMサービ ス「cosmi Relationship Suite」を開発 – http://pressrelease.adingo.jp/news/2012/07/adingocr mcosmi--7f06.html – cosmi Relationship Suiteのプレスリリースです。• 【実はよく知らない】オーディエンスデータプ ラットフォームってなに? – https://www.facebook.com/note.php?note_id=222292 327824741 – DMP、または、オーディエンスデータプラット フォームについてまとめた記事です。
  69. 69. その他• 継続的デリバリのパターン – http://www.infoq.com/jp/articles/Continous- Delivery-Patterns – 継続的デリバリについてよくまとまっていま す。私達の行なっている継続的デリバリは簡 易的なものです。Jenkinsなどのツールを利用 することで、比較的容易に環境を構築するこ とができます。

×