Your SlideShare is downloading. ×

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

1,438

Published on

Published in: Business
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,438
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
11
Comments
0
Likes
5
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 継続的データ解析環境の構築 株式会社adingo エンジニア 鈴鈴⽊木健太
  • 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. 継続的なデータ解析の話をします。
  • 4. 今はこんな業務をしています。Web広告の技術をCRMに取り⼊入れ、各クライアント様のデータを収集・分析した上で効果や現状を分かりやすく⽰示し、LTVの引き上げを⾏行行うツールです。 http://cosmi.io
  • 5. 基本的な解析のやり⽅方として•  定点観測 –  年年、⽉月、週、⽇日、時間、分、秒 –  毎⽇日⾒見見ているから気がつくことがある•  アドホック –  何か仮説がある場合に、深掘りしていく。
  • 6. 検討計測 仮説 実装
  • 7. 解析をする上での悩みがあります。 http://www.flickr.com/photos/darwinbell/5827849044/sizes/o/in/photostream/
  • 8. それは考える時間が減っていく事です。
  • 9. 検討計測 仮説 実装
  • 10. ある⽇日急に、「ごめん、明⽇日までにAサイトのB商品 の購買動向について詳細教えてくれる?30代男性のあるクラスタに属性しているユーザが⼤大量量に購⼊入しているみ たいなんだよね。」 という依頼が来る。
  • 11. Audience Data +Data of Service http://www.flickr.com/photos/chef_ele/3791289276/sizes/l/in/photostream/
  • 12. 枠から⼈人へ 性別 年年齢 居住 ? 職業 興味 趣向 http://www.flickr.com/photos/catikaoe/232832224/sizes/o/in/photostream/
  • 13. LOG impression click conversionログにはいくつかの種類があります。 フォーマットが違います。
  • 14. 毎秒 様々なスパンでログと向き合います。毎分毎時毎⽇日 months weeks毎週 days毎⽉月 hours minuteshttp://www.flickr.com/photos/gadl/284995199/sizes/o/in/photostream/ seconds
  • 15. Log: X0GB / dayコンスタントにログが増えていきます。
  • 16. ログの向こう側を⾒見見る http://www.flickr.com/photos/eole/1394588888/sizes/o/in/photostream/
  • 17. 環境の変化に対応しよう。より柔軟に解析できる環境を作ろう。
  • 18. 検討計測 仮説 実装
  • 19. Infrastructure of cosmi
  • 20. ⼤大まかな要件•  スケールが容易易なログコレクタ•  どんなスキーマが来ても分析容易易性を確 保•  安定したオーディエンスデータの提供
  • 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. AWSを採⽤用した理理由(解析視点)ü 安定したストレージü S3 -> Elastic MapReduce連携が便便利利ü 分析するデータ量量が増えてもスケールが 容易易
  • 23. 実際のログ解析
  • 24. ログ解析にはApache Hiveを採 ⽤用しました。
  • 25. 検討計測 仮説 実装
  • 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. -- defining table for output daily referer count bypages.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. 集計します。この場合だと、結果は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. ü 導⼊入の敷居低いü 保守が容易ü  何をしているのか⼀一⽬目で分かる
  • 30. これで⼿手軽にデータについて調べることが できます。あとはこれを継続して回すことが⼤大事です。
  • 31. 検討計測 仮説 実装
  • 32. 解析を継続するために必要なことü 解析までのリードタイムを短くするü 気軽に解析バッチを実⾏行行できるようにするü 失敗してもすぐに再実⾏行行できる
  • 33. Deployment & Running Batch with Jenkins
  • 34. 解析にもJenkinsを•  Jenkinsの特徴 –  インストール、セットアップが簡単 –  ジョブ設定、通知が容易易 •  「何が起こった時に何をして何を通知するか」 –  プラグイン拡張•  Jenkinsの主な役割 –  継続的なビルド及びテスト –  外部ジョブの監視 Welcome to Jenkins CI! | Jenkins CI http://jenkins-ci.org/
  • 35. Jenkinsをフル活⽤用していますü ログコレクタとオーディエンスデータAPIの継続 的デリバリü MapReduce⽤用Javaプログラムのテスト・ビルド・ s3への配置・実⾏行行ü Hiveスクリプトのs3への配置・実⾏行行
  • 36. $ vim apps/hoge/output_log_format$ git commit –m“#123 ログスキーマを変更更”$ git push origin master push Team
  • 37. push Team mirroringgithubにコードがpushされると、ローカルのmirrorリポジトリにfetchします。初期化時$ git clone --mirror git@github.com:hoge/repos.git更更新時$ git remote update
  • 38. push Team mirroring :release ビ ル ド パ イ プ ラ イ ン :masterJenkinsにはビルドパイプラインが構築してあり、これによってジョブフローを制御しています。また、ブランチごとにデプロイ先を変えています。
  • 39. pushTeam mirroring :release ビ ル ド パ イ プ ラ イ ン development :master EC2 開発環境にはmasterブランチのコードが ⾃自動的にデプロイされます。 この際テストやマイグレーションなども 同時に⾏行行われます。 $ fab –f app_fabfile.py development deploy testing migrate
  • 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. 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. 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. 検討計測 仮説 実装
  • 44. しかしやはり、⼈人間、失敗をします。 http://www.flickr.com/photos/proimos/4199675334/sizes/o/in/photostream/
  • 45. 検討! 計測 仮説 実装失敗したらすぐに修正したいものです。失敗したことを、すぐに知ることが⼤大事です。
  • 46. そんなときは、Jenkinsが教えてくれます。
  • 47. ./elastic-mapreduce Amazon Elastic MapReduceMapReduceジョブの実⾏行行をまず、Jenkinsから⾏行行います。これは定期的に実⾏行行されます。
  • 48. ./elastic-mapreduce Amazon Elastic MapReduce Trigger Parameterized Buildparam:job_id ジョブ実⾏行行後、job_idをパラメータとして渡し、 新たなジョブを実⾏行行します。
  • 49. ./elastic-mapreduce Amazon Elastic MapReduce Trigger Parameterized Buildparam:job_id monitoring state of the job 新しいジョブによってMapReduceジョブを監視します。
  • 50. ./elastic-mapreduce FAILED. Amazon Elastic MapReduce Trigger Parameterized Buildparam:job_id monitoring state of the job 仮にここで、ジョブが何らかの原因で失敗したとします。
  • 51. ./elastic-mapreduce FAILED. Amazon Elastic MapReduce Trigger Parameterized Buildparam:job_id Getting Log 監視ジョブが失敗したことを検知し、 Elastic MapReduceからapi経由でログを取得します。
  • 52. ./elastic-mapreduce Amazon Elastic MapReduce Trigger Parameterized Buildparam:job_id Getting Logmail, IRC, etc.including the log. ジョブが失敗したことを様々な⽅方法で通知します。 この際にログ⾃自体も送ります。
  • 53. 検討!計測 仮説 実装
  • 54. 発表のまとめをします。
  • 55. 時間は限られています。 しかし、 調べたいことは⼭山積み。http://www.flickr.com/photos/bogenfreund/556656621/sizes/o/in/photostream/
  • 56. 1⼈人で解析するのではなく、周りのメンバーを巻き込みましょう。誰もがデータについて考えられるような環境を作りましょう。
  • 57. しかしやはり、⼈人間、失敗をします。 http://www.flickr.com/photos/proimos/4199675334/sizes/o/in/photostream/
  • 58. なので道具を活かしましょう。
  • 59. 考える時間を作りましょう。 http://www.flickr.com/photos/darwinbell/5827849044/sizes/o/in/photostream/
  • 60. データを観察し、想像しましょう。⾓角度度を変えて、繰り返し繰り返し考えましょう。 http://www.flickr.com/photos/srtagomez/5416367341/sizes/l/in/photostream/
  • 61. 検討 計測 仮説 実装素早く回し、調べ、考え、またすぐに試しましょう。継続的な解析ができる環境をつくりましょう。
  • 62. 解析にも継続的デリバリを http://www.flickr.com/photos/columna/236353428/sizes/l/in/photostream/
  • 63. 参考資料料
  • 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. 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. Apache Hiveについて•  Programming Hive - OReilly Media –  http://shop.oreilly.com/product/ 0636920023555.do –  Hiveに関する仕様がよくまとまっています。 もちろんWeb上やJIRAで参照できる内容がほ とんどですが、⼿手元においておくと安⼼心です。
  • 67. Fabricについて•  Github: fabric/fabric –  https://github.com/fabric/fabric –  デプロイにはfabricを利利⽤用しています。 python製のデプロイツールです。•  Fabric documentation –  http://docs.fabfile.org/ –  公式のドキュメントです。やはりここが⼀一番 情報が多いです。ただ実践的にどのように使 うか、という点に関しては情報がまだまだ少 ないです。
  • 68. cosmi Relationship Suiteについて•  adingo、ディスプレイ広告枠活⽤用型のCRMサービ ス「cosmi Relationship Suite」を開発   –  http://pressrelease.adingo.jp/news/2012/07/ adingocrmcosmi--7f06.html –  cosmi Relationship Suiteのプレスリリースです。•  【実はよく知らない】オーディエンスデータプ ラットフォームってなに?   –  https://www.facebook.com/note.php? note_id=222292327824741 –  DMP、または、オーディエンスデータプラット フォームについてまとめた記事です。
  • 69. その他•  継続的デリバリのパターン –  http://www.infoq.com/jp/articles/ Continous-Delivery-Patterns –  継続的デリバリについてよくまとまっていま す。私達の⾏行行なっている継続的デリバリは簡 易易的なものです。Jenkinsなどのツールを利利⽤用 することで、⽐比較的容易易に環境を構築するこ とができます。

×