• Save
Jenkinsとhadoopを利用した継続的データ解析環境の構築
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 10,710 views

 

Statistics

Views

Total Views
10,710
Views on SlideShare
8,639
Embed Views
2,071

Actions

Likes
46
Downloads
0
Comments
0

9 Embeds 2,071

http://blog.kentasuzuki.net 1934
http://nptech.posterous.com 85
http://2120679409038707942_db9f46037c1af48464edb2f7b360bce71cf23e92.blogspot.com 25
https://twitter.com 18
https://si0.twimg.com 3
http://s.deeeki.com 3
http://kentasuzuki.net.localhost 1
http://192.168.134.10 1
http://source644.rssing.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

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