engineer event in kyoto 10-04-17
TRANSCRIPT
アグレッシブなクラウドの使い方
クックパッド株式会社勝間 亮
COOKPADの開発の裏側見せます in 京都
自己紹介
• 勝間 亮 (カツマ リョウ)• 2009.05 ~• サービス開発エンジニア• @ryo_katsuma
京都++
本日のお品書き•なぜクラウド?•どうやって使ってるの?•何ができるの?•まとめ
なぜクラウド?
の、前に。
クックパッドのものづくり
ユーザの声を大事
ユーザの声を大事鵜呑み
にしない!
ユーザの欲求を正しく理解
何を実装すべきか?
膨大な量のログから、ユーザの欲求を正しく理解
7000時間/年
ユーザ理解に限界
分散処理による解析環境の必要性
クラウド
クラウド
価値の高いサービスを実現する手段
どうやって使ってるの?
•EC2•S3•RDS
•EC2•S3•RDS
データ変換Hadoop
バックアップHadoop用ストレージ Hive
EC2
•ログ変換•Hadoop クラスタ
用途
•Cloudera AMI‣ Hadoopの設定ゼロ‣ CDH1‣ + s3cmd, 自作Utility tool‣ CDHバージョン上げたい。。
AMI
•m1.large × 10 ~•起動数の上限 500‣ AWSの人、丁寧でいいかんじ
インスタンス数
Elastic MapReduce
•デバッグしづらい•余分に費用•毎回クラスタ起動+終了•実用性は低い、と判断•
Elastic MapReduce
•デバッグしづらい•余分に費用•毎回クラスタ起動+終了•実用性は低い、と判断•GUI(笑)
EC2 cluster内部NW
通信
EC2 cluster内部NW
hadoop-ec2 + ssh
標準出力
通信
S3
バックアップ
•PV, 広告ログ•cron + s3cmd
Hadoopストレージ•HDFS‣ データロード時間がボトルネック
•hadoop-site.xml‣ key : fs.default.name ‣ val : s3://path/to/log
bucket•用途ごとに区別‣ Backup
‣ Hadoop
‣ Report
•(ドメイン的な)予備
RDS
用途
•Hive(後述)のメタデータ保存•複数クラスタでメタデータ共有•small instance‣ パフォーマンス求めてない
Hadoop
Map Reduce
1.Hadoop Streaming‣ Ruby
2. Hive‣ SQL (like) wrapper
※ 直接Javaでの開発はなし
Hadoop Streaming
#!/usr/bin/ruby
ARGF.each do |line| line.chomp! logs = line.split(/,/) unless logs.empty? printf("%s,1\n", logs[0]) endend
#!/usr/bin/ruby
h = Hash.newARGF.each do |line| line.chomp!
array = line.split(/,/) uid = array[0] c = array[1]
count = 1 if h.key? uid count = h[uid].to_i + 1 end
h.store uid, countend
printf("#{h.length}")
map.rb reduce.rb
•細かな制御が可能•Rubyのライブラリを利用
Hive•MapReduceのSQLラッパ‣ Facebookが開発‣ Select文をタスク分割
•MySQLで可能なことはほぼOK‣ join‣ group by‣ order by
#!/usr/bin/ruby
ARGF.each do |line| line.chomp! logs = line.split(/,/) unless logs.empty? printf("%s,1\n", logs[0]) endend
#!/usr/bin/ruby
h = Hash.newARGF.each do |line| line.chomp!
array = line.split(/,/) uid = array[0] c = array[1]
count = 1 if h.key? uid count = h[uid].to_i + 1 end
h.store uid, countend
printf("#{h.length}")
map.rb reduce.rb
select count(distinct user_id) from logs;
240GBのcsvデータからselect
0
300
600
900
1200
1 3 5 10node
sec
使い分け
•Hadoop Streaming ... レポーティング•Hive ... バッチ、オンデマンド
Pigもキてる!
0
175
350
525
700
1020
30
Hive Pig
何ができるようになったの?
1. たべみる
たべみる
•検索ログの解析•地域別、週別、月別
たべみる
~ 2009
7000時間
~ 2009
7000時間
Hadoop Streamingで解析
たべみる2009
たべみる2009
30時間
効果
•食材, 料理のトレンド•より速くトレンドを把握
2. モバイルアクセス解析
モバイルアクセス解析
•GA パフォーマンス悪い + 不安定•MySQLで自前で解析‣ daily PV, UUくらいしか取れなかった
モバイルアクセス解析
•GA パフォーマンス悪い + 不安定•MySQLで自前で解析‣ daily PV, UUくらいしか取れなかった
Hiveでより多くのデータを解析
効果
効果
PV/UU (週次)
効果
PV/UU (週次)
PV/UU (月次)
効果
PV/UU (週次)
PV/UU (月次)
リピートユーザ数 (日次)
•この新機能 or 改善には「効き」がある?•「ファン」になってくれている?
リピートユーザ数
まとめ
•AWSを利用してユーザの理解•Hadoopは親和性がAWSと高い• 今後もより高い価値のサービスを実現
One more thing
ご利用は計画的に