ソーシャルアプリでの amazon elastic mapreduce 活用事例

Post on 19-May-2015

9.953 Views

Category:

Documents

9 Downloads

Preview:

Click to see full reader

DESCRIPTION

TokyoWebmining #7 buhii

TRANSCRIPT

ソーシャルアプリでの Amazon Elastic MapReduce 活用事例

Takahiro Kamatanigumi, Inc.

2010/09/26

Sunday, September 26, 2010

アジェンダ

• 自己紹介

• これまでの解析

• Amazon Elastic MapReduce による解析

• 結論

Sunday, September 26, 2010

自己紹介

• Twitter: @buhii

• 大学休学中• gumi エンジニア@解析班

• コンピュータを用いた芸術、デザイン• 電子楽器 beacon

• gumi「闇の解析班」@ynil

http://www.kansei.tsukuba.ac.jp/~uchiyamalab/beacon

Sunday, September 26, 2010

これまでの解析

Sunday, September 26, 2010

gumi• mixi, モバゲータウン, GREE

• python(Django)

• Amazon Web Services (EC2 + RDS)• ロードバランサーで複数のゲームサーバに負荷分散

• 解析するデータはアクセスログとDB

今回はアクセスログの話をします

Sunday, September 26, 2010

• PV(ページビュー), UU(ユニークユーザー数)• DAU(Daily Active Users)

• その日遊んだユーザーの人数

• 課金率• 課金した人数 ÷ DAU

• ARPU(Average Revenue Per User)• 課金ユーザー1人が平均いくらお金を使ったのか

ソーシャルゲームにおける重要な指標

Sunday, September 26, 2010

旧解析システム構成

.

.

ゲームサーバ

解析サーバ

DB

各サーバで毎朝cronでlog解析 

データの集約処理解析済みデータの蓄積

レポーティングダッシュボード提供

Amazon Web Service(AWS)

それぞれのゲームごとに解析環境を構築

CSV NFS

Sunday, September 26, 2010

• DAU,ARPU,課金率はあくまで指標•最大化すべき目標値•各指標を最大化するための解析とは?

指標値を上げる要因の発見指標値を下げている問題点の発見フォーカスすべき新しい指標の発見

素早い仮説検証プロセスが必須

データ解析に求められるもの

Sunday, September 26, 2010

実現のためには...

これからの解析に求められるもの•新しい観点からのデータ解析が素早く出来る事

•ゲームの運用を妨げない

•ゲームサーバと解析環境の分離•過去の大量のログを解析する環境の構築•ワークフローを全アプリで共通化

Sunday, September 26, 2010

新しい解析の実現に向けて•これまでも全て Amazon EC2 で構築• Amazon Web Servicesを活用•ログの保存場所を共通化• Amazon S3•大規模解析• Amazon S3 + Amazon Elastic MapReduce

Sunday, September 26, 2010

Amazon Elastic MapReduce

新システム構成図

ゲームサーバ 解析server

amazon S3...

.

.

.

.

.

.

毎朝 cron によりログを転送

S3 から一日分のデータを落として解析AWS上

Sunday, September 26, 2010

解析のワークフロー

•日々の解析は S3 から一日分を取得し行う

•実験的な大規模データ解析• Amazon S3 + Elastic MapReduce有用性が判明すれば日々のバッチ処理に

落とし込むSunday, September 26, 2010

Amazon Elastic MapReduce

による解析

Sunday, September 26, 2010

Mapper

Mapper, Reducer を組み合わせてプログラムを書くことで大きなデータでもスケールアウトしながら処理できるようになる

Reducer

ファイルを一行ごとに読み込んでKey, Value のペアを作成

MapReduce

key, value の組から結果を出力する

Mapper からの同じ key のデータを同じ

Reducer に渡す処理。ここは自動Sort / Shuffle

Sunday, September 26, 2010

Amazon Elastic MapReduce

• Hadoop

• Hadoop Streaming を用いることで Mapper とReducer を Ruby, Perl, Python, PHP, R, Bash, C++

で記述可能

• EC2 のインスタンスを job 毎に起動し使用

• 使いたい時に必要な分だけ借りられる

Sunday, September 26, 2010

Example Task

• ユーザーの継続性の解析• ユーザーが登録してから何日後アプリに来なくなってしまったか

• 過去全てのログを元にこれまで取っていなかったデータを抽出する

Sunday, September 26, 2010

継続性の解析• Mapper

• アクセスログ(Apache Log)

• 一行毎にユーザーID を key、日付をvalue としてタブ区切りで出力し、Reducer に渡す

Sunday, September 26, 2010

継続性の解析

• Reducer

• sort/shuffle 処理によってユーザーID 毎に

Reducer へ集まる

• ユーザーID毎に、いつアクセスしたのかを集計する

Sunday, September 26, 2010

Reducer からの出力31758623 2010-08-2042346572 2010-09-05,2010-09-0631977736 2010-08-11,2010-08-12,2010-08-13,2010-08-1414007991 2010-08-1635995849 2010-08-12,2010-08-13,2010-08-1434246688 2010-08-21,2010-08-22,2010-08-23,2010-08-27...

ここからさらに処理して、登録日から何日後にアクセスがあったのかカウントするハッシュを作り離脱率を計算する

(軽いので一台のPCで計算)

Sunday, September 26, 2010

Amazon Elastic Mapreduce で実行

• AWS のアカウントを取得する

• S3 に、Mapper, Reducer のプログラム及び解析するデータを移動

→ s3cmd, S3Fox Organizer, Cyberduck

• 後はブラウザ上で Job を追加すれば OK

• コマンドラインツールももちろん有りSunday, September 26, 2010

Sunday, September 26, 2010

Sunday, September 26, 2010

プロジェクト名を入力!

スクリプト言語を使うときは Streaming を選択

Sunday, September 26, 2010

複数の input Location を解析するときは、Extra Args に -input s3n://(bucket名)/(ログディレクトリ)/access_log.*

複数指定可能

gzip で圧縮されたファイルを読み込む場合はHadoop オプションを Extra Args に追記

-jobconf stream.recordreader.compression=gzip

{Input, Output} Location, Mapper, Reducer は S3 のバケット上のファイルパスを指定

Sunday, September 26, 2010

インスタンスのタイプ、数を設定

Sunday, September 26, 2010

Sunday, September 26, 2010

Sunday, September 26, 2010

Debug 画面でいろいろ見えるよ!

Sunday, September 26, 2010

結論

Sunday, September 26, 2010

素敵!• Hadoop の環境構築は全て自動化されている

• 複雑なものは多段 MapReduce で処理

• 必要な時に一気に借りて一気に計算

• 初期コストは非常に安いので実験的な用途には最適

Sunday, September 26, 2010

Hadoop と比べて弱い点

• 初期費用は安いが毎回お金がかかる

• S3は転送量と容量で課金

• インスタンス使用量が時間計算で取られる

• hadoopの実行の前に毎回EC2インスタンスを立ち上げるので余分に数分掛かる

• 数分しか使わなくてもきっちり1時間分請求されてる気がする (インスタンス20台なら...)

大規模である方がうまみが多い

gzip で圧縮すると良い

Sunday, September 26, 2010

参考文献

http://nlpyutori.g.hatena.ne.jp/yaruki_nil/20100911/1284089305

なしてMapReduceだけがこんなにもてはやされたのか考える@ynil

Sunday, September 26, 2010

ご清聴ありがとうございました

Sunday, September 26, 2010

ふろく

Sunday, September 26, 2010

Sunday, September 26, 2010

MapReduce MapReduce(マップリデュース)はコンピューター機器のクラスター上で、巨大なデータセットに対し分散並列処理を行うのを支援する目的で、Googleによって考案されたソフトウェアフレームワーク。

このフレームワークは、関数型言語にて共通して使われる、Map関数とReduce関数からインスパイアされて作られている。(しかし、Map関数とReduce関数の目的と、フレームワークにおける用いられ方は同じではない。)現在、MapReduceのライブラリ群は、C++、Java、Python 等のプログラミング言語で実装されている。

Wikipedia “MapReduce” http://ja.wikipedia.org/wiki/MapReduce

Sunday, September 26, 2010

cron によるバッチ処理

• ゲームサーバ毎に分散されたアクセスログの

PV, UU を計算し NFS に CSV 形式で保存

• 課金のデータを DB から読み込み → 本番DB に負荷をかけないように

• その後 PV, UU と課金データを組み合わせて指標を出力

Sunday, September 26, 2010

top related