Advertisement

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

Engineer at VOYAGE GROUP
Oct. 30, 2012
Advertisement

More Related Content

Advertisement

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

Recently uploaded(20)

Advertisement

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

  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 minutes http://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 log CREATE 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 SEQUENCEFILE LOCATION 's3n://sample-bucket/access_log/'; ひと目でスキーマがわかります。
  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 't' STORED AS TEXTFILE LOCATION 's3n://sample- bucket/reports/${EVENTDATE}/daily_referer_count_rankin g’; 例えばアクセスログからリファラを分析する際には 上のようなテーブルを作り、
  28. 集計します。 この場合だと、結果はS3に格納されます。 -- aggregation daily count of each referer. INSERT OVERWRITE TABLE daily_referer_count SELECT referer, count(*) AS referer_count FROM access_log WHERE dt="${EVENTDATE}" GROUP BY referer DISTRIBUTE BY referer SORT BY referer_count DESC, referer ASC LIMIT 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 mirroring githubにコードがpushされると、 ローカルのmirrorリポジトリにfetchします。 初期化時 $ git clone --mirror git@github.com:hoge/repos.git 更新時 $ git remote update
  38. push Team mirroring :release ビ ル ド パ イ プ ラ イ ン :master Jenkinsにはビルドパイプラインが構築してあり、 これによってジョブフローを制御しています。 また、ブランチごとにデプロイ先を変えています。
  39. push Team 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 MapReduce MapReduceジョブの実行をまず、Jenkinsから行います。 これは定期的に実行されます。
  48. ./elastic-mapreduce Amazon Elastic MapReduce Trigger Parameterized Build param:job_id ジョブ実行後、job_idをパラメータとして渡し、 新たなジョブを実行します。
  49. ./elastic-mapreduce Amazon Elastic MapReduce Trigger Parameterized Build param:job_id monitoring state of the job 新しいジョブによってMapReduceジョブを監視します。
  50. ./elastic-mapreduce FAILED. Amazon Elastic MapReduce Trigger Parameterized Build param:job_id monitoring state of the job 仮にここで、ジョブが何らかの原因で失敗したとします。
  51. ./elastic-mapreduce FAILED. Amazon Elastic MapReduce Trigger Parameterized Build param:job_id Getting Log 監視ジョブが失敗したことを検知し、 Elastic MapReduceからapi経由でログを取得します。
  52. ./elastic-mapreduce Amazon Elastic MapReduce Trigger Parameterized Build param:job_id Getting Log mail, 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によるメール通知の機能を拡張するプラグインです。 • O'Reilly 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 - O'Reilly Media – http://shop.oreilly.com/product/063692002355 5.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/adingocr mcosmi--7f06.html – cosmi Relationship Suiteのプレスリリースです。 • 【実はよく知らない】オーディエンスデータプ ラットフォームってなに? – https://www.facebook.com/note.php?note_id=222292 327824741 – DMP、または、オーディエンスデータプラット フォームについてまとめた記事です。
  69. その他 • 継続的デリバリのパターン – http://www.infoq.com/jp/articles/Continous- Delivery-Patterns – 継続的デリバリについてよくまとまっていま す。私達の行なっている継続的デリバリは簡 易的なものです。Jenkinsなどのツールを利用 することで、比較的容易に環境を構築するこ とができます。
Advertisement