21
ドリコムのデータ分析環境のお ところてん @tokoroten

ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話

Embed Size (px)

DESCRIPTION

俺は分散を捨てるぞジョジョー http://atnd.org/events/34146

Citation preview

Page 1: ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話

ドリコムのデータ分析環境のお話

ところてん

@tokoroten

Page 3: ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話

自己紹介

• ところてん@Drecom–データ分析グループ–高機能雑用

• R&D&火消し&データ分析&企画• 最近、インフラ業務が外れた

–定額働きたい放題プラン、意識の高い社畜

– Pythonista– awkかわいいよawk– Rubyは読めるけど書けない

• 注)DrecomはRailsの会社です 3

Page 4: ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話

ドリコムのデータ分析の概要

• 言語– Hadoop、hive、sh、R、SPSS、Knime、Python

• 環境– 分析用の専用サーバ*2(1.2TBのFIO搭載)– データ収集、分析用Hadoopクラスタ

• Impalaを本番投入準備中

• 仕事– ゲームのバランスチェック、KPI設計、継続率、収益予測、テキストマイニング、広告効果計測

4

Page 5: ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話

ドリコムのデータ分析の構成例

M-DB1 M-DB2 M-DB3 M-DB4 M-DB5

S-DB1S S-DB2 S-DB3 S-DB4 S-DB5

ActiveRecord TurntableユーザIDごとに水平分割

Webサーバ数十台

マスター5台(FIO搭載)

スレーブ5台(FIO搭載)

FIOを搭載した分析用サーバ1.2TBのFIO、16コア、メモリ32GB

定期的にDBのダンプを取得

ログサーバ(HDFS)

HDFSから必要なログを収集

Fluentd

Fuse-HDFS

Page 6: ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話

データ分析の人的問題

• 全部を満たすのは難しい

–統計分析能力(必須)

–ゲームそのものに対する理解

–データ抽出、前処理能力

–機械学習、マイニング

–可視化

–並列処理、分散処理(hadoop)

6

Page 7: ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話

分析のトレードオフ

• おれは分散をやめるぞジョジョーー!!

画像省略

Page 8: ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話

ソーシャルゲームのデータ特性

• データ量はたかが知れてる

–アクセスログ、一日数十GB

– DBのダンプ、数百GB

• ゲームの仕様変更が頻繁

–あまりに古い物を参照しても仕方ない

–三ヶ月前のログは比較しづらい

• 短期間の莫大な量のデータを解析する必要

• 分散に向かない解析が必要なことも

Page 9: ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話

hadoopのデータ特性、思想

• Hadoopは無限のストレージに無限の計算リソースを利用して価値を生み出すシステム

• データは経年劣化しないことが前提–遺伝子情報–ウェブページのスナップショット– etc…

• ソーシャルゲームのデータ特性とは相性が悪い–ソーシャルゲームのデータは経年劣化する–二週間に一度、大規模なアップデート

Page 10: ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話

分析のトレードオフ

• Hadoopで分散より、スクリプト言語–分散処理のデバッグの時間が惜しい

• PDCAは三日程度

• 一日リリースが遅れるとXXXX万円の機会損失

–ゲームごとにスキーマが異なる

–スキーマは更新で頻繁に変わる

–小さい処理ではHadoopのオーバーヘッドが重たい

– KnimeやSPSSなどの高度なツールが使える

– FIOが早い、FIOが早い、FIOが早い

Page 11: ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話

データ分析のワークフロー

• サービスのSlaveにクエリを投げて、DBのスナップショットをFIO上に取得

• fuse-hdfsでマウントされたHDFSにログデータを問い合わせ

– 何度もアクセスして負荷が激しい場合はFIO上に再配置

• スクリプト言語でゴリゴリ処理

• 結果をRやExcelで可視化

Page 12: ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話

データ分析の運用フロー

• 分析チームが分析用サーバでデータ分析

• 定常化する必要がある場合は、インフラ部に依頼、–Hiveバッチ化、hadoopバッチ化

–スクリプトを渡して運用を依頼• 分析用サーバはよく落ちる(無茶をするので)

–分析のための中間データの出力を依頼• 徐々に移管していく

Page 13: ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話

Bigdataはどこで生まれるのか?

• データが生まれるのは運用の現場

• 分析者がログデータを手に入れるには現場との信頼関係が必須–大企業では信頼関係が構築しづらい

研究 開発 運用

ログデータ

Page 14: ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話

自主規制

Page 15: ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話

分析のための組織構造

• 基本的に社員はすべてのデータが見れる

–組織が近いので、やり取りが迅速

–分析者はアプリ開発者の真横に座る

ソーシャルゲーム事業部

陰陽師ビックリマン

ソード×

ソード

戦国フロン

ティア

データ分析

基盤部ユーザサポート

アプリケーションごとの開発・運用ライン

Page 16: ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話

ソーシャルゲームにおけるPDCA

• ログデータと開発が近いとPDCAが回る

Plan

Do

Check

Action 開発ライン

データ分析

開発ラインResearch

基盤部

開発ライン

Page 17: ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話

FIOってホントに早いの?実験

• 実験環境、分析用PC– Hiveクエリ

– Fuse-hdfs

– FIO

– SASドライブ(3台のストライピング)

–開発用ノートPC

• 対象データ–あるアプリの一日分のアクセスログ

• gz圧縮 1.3GB 生データ 5.6GB

Page 18: ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話

ユニークユーザカウント

• コマンド– time zcat *.gz | awk -F"\t" '{print $3}' | sort -u | wc –

l

– hive : select count(distinct userid)~ group by userid

• 結果

– Hive 72秒

– Fuse-hdfs 89秒

– FIO 70秒 (解凍済みだと46秒)

– SASドライブ 71秒(解凍済みだと46秒)

– 開発用ノートPC 140秒

Page 19: ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話

zcatでファイルを舐めるだけ

• コマンド

–time zcat *.gz > /dev/null

• 結果

–Fuse-hdfs 76秒

–FIO 57秒 (解凍済みだと1.55秒)

–SASドライブ 57秒(解凍済みだと1.54秒)

–開発用ノートPC 解凍済みで98秒

Page 20: ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話

原因はCPU

• 結果– FIO≒SAS(3台ストライピング)>hive>fuse-hdfs>>>ローカル

• CPUが足を引っ張る–処理時間の大半はgzの展開

• 並列化すると真価を発揮する–データ分析のために過去のDB状態をバックアップからリストア

– 8DBの同時復元を行っても速度変わらず

Page 21: ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話

まとめ

• ドリコムのデータ分析チームは分散してない– ソーシャルゲームのデータ特性– PDCAサイクルが短い– FIOが早い

• 安定したらインフラ部に依頼– Hive、hadoopによる中間データの定常出力依頼– スクリプトの引渡し、運用依頼、hadoopへの移植依頼

• FIOの実験– FIOの性能を活かしきるにはCPUがボトルネック– 分析のためにDBの8並列リストアとかやってる