Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

2012 02-02 mixi engineer's seminor #3

1,891 views

Published on

2012-02-02 mixi engineer's seminor #3

Published in: Technology
  • Be the first to comment

2012 02-02 mixi engineer's seminor #3

  1. 1. 株式会社ミクシィ 石川有
  2. 2. 所属 たんぽぽグループ 解析チーム “「刺身の上にタンポポをのせる仕事」 のような単純 作業の仕事から社内開発者を解放しよう、という ミッションの元、たんぽぽグループは技術をベース とした様々な仕事や課題解決に携わります。”担当業務 解析プラットフォームの構築 統計解析・データマイニング 解析などの相談・教育
  3. 3. Perl のみでは大規模データ処理が大変 データの結合などの処理時間,メモリ使用量が膨大trial & error が多い解析にレビューが向かない 1つの解析をするのに何営業日も掛かっていた解析データの分散 解析したいデータの把握 データ操作のライブラリの使い方の学習コスト解析データの再利用性の欠如 共通して使えたり,使い回しのできるデータが多かっ たアプリエンジニアが解析環境のメンテナンス 各サービスの解析が属人性を持ってしまう
  4. 4. アプリエンジニアの解析環境メンテナンスからの解放 サービス開発者は,サービス開発に集中してもらいたい解析に関するレビューからの解放 コードレビューやDBレビューの手続きコストを無くしたいアプリ側の実装と解析側の実装の統合 アプリエンジニアがなにか解析したいサービスを実装したら,自 動的に解析環境にも反映アプリ側の環境と解析側の環境の分離 DBの負荷など気にせず自由に解析 データを用意するというコストの解放データや解析の属人性の排除解析の再現性の向上処理時間の短縮
  5. 5. データがそこにある,すぐ使える 解析プラットフォー ム
  6. 6. Hadoop Hadoop mixi ページの管理者向けの解析 Hive 定期実行集計,スポット調査 DAUやデモグラ集計など 自社開発の Perl フレームワーク HoneyR データマイニング 多変量解析,クラスタリング etc 統計的検定 A/B テスト の検定 etc
  7. 7. アクセスログ etc Hadoop Cluster 保存用ストレージ MySQL DB Hadoop Cluster •定期実行集計 → Hive •カウント以上の解析 → R
  8. 8. Strong Point Weak Point 大規模データが扱える バッチ処理向き 正規表現,JSONで扱える 「集計」以上のことが難しい SQL を知っている人の学習コストHive 処理は基本的にオンメモリで行うの 大規模データの扱いが難しい で,ロードさえ出来れば高速 データ結合もできるが,Hive 統計解析,データマイニングのライ に比べると遅い ブラリが充実 半構造化データの扱いに弱い R
  9. 9. A data warehouse system for Hadoop
  10. 10. Hadoop 上で動作するオープンソースのデータウェアハウスHiveQL という SQL like な言語で,Hadoop 上のデータを操作 JOIN, OUTER JOIN データ結合処理が簡単,かつ高速に処理できる UNION ALL なども利用できる便利な機能 PARTITIONによる処理単位の分離 テーブル操作などにJSON parser が利用できる
  11. 11. Hive 上の1つのテーブル内でデータの独立性をもたせる Hive は基本的には全件処理 処理すべきデータを PARTITION で区切れる日単位でなど PARTITION に利用できる構造が同じデータであれば,1つのテーブルで複数のデータを扱える 「ラベル」的な利用ができる
  12. 12. Hive上のあるテーブルに1年分のデータが 格納 PARTITION なし 1年分のデータを処理日ごとの PARTITION あり 対象の日付けのみを処理
  13. 13. 複数 Event のデータの同居できる Event A のみを処理日,Event で PARTITION Event B のある日のみを処理
  14. 14. JSONの連想配列 {“user”:”A”, “post_time”:”20120202000000”, “via”:”mobile”} Log {“user”:”B”, “post_time”:”20120202000001”, “via”:”PC”} {“user”:”C”, “post_time”:”20120202000002”, “via”:”Application”} JSON文字列に対して SELECT SELECT user, post_time, viaHive Table FROM table t LATERAL VIEW json_tuple(t.json, ‘user’, ‘post_time’, ‘via’)CREATE TABLE ( AS user, post_time, via; json STRING);
  15. 15. JSONの連想配列MySQL などの VIEW に相当する定義にも利用でき {“user”:”A”, “post_time”:”20120202000000”, “via”:”mobile”} Log {“user”:”B”, “post_time”:”20120202000001”, “via”:”PC”}る {“user”:”C”, “post_time”:”20120202000002”, “via”:”Application”} JSON文字列に対して SELECT SELECT user, post_time, via Hive Table FROM table t LATERAL VIEW json_tuple(t.json, ‘user’, ‘post_time’, ‘via’) CREATE TABLE ( AS user, post_time, via; json STRING );
  16. 16. Hive 用 Perl フレームワーク
  17. 17. セスログ etc Hadoop Cluster 保存用ストレージySQL DB Hadoop Cluster
  18. 18. Honey の目的 エンジニアの解析環境開発のコスト低減セスログ etc Hadoop Cluster Honey の機能 分散した解析データの Hive へのロードのインタ フェース 保存用ストレージ Hive による定期集計の記述の統一と簡略化ySQL DB Hadoop Cluster User Event 用 Hive スキーマの自動生成
  19. 19. アプリエンジニアが解析したいデータを新規追加,変更を加えたとき Hive のスキーマの変更 スキーマ変更の確認や実行依頼などの手続き Hive へのデータの入れなおし 解析業務の停滞アプリエンジニアの解析環境メンテナンスからの解放ができないアプリエンジニアが取りたいデータの追加・変更があったら, 解析環境も連動して欲しい
  20. 20. JSON形式 PARTITION を利用CREATE TABLE log ( ボイス投稿のログ JSON STRING)PARTITIONED BY ( 日記のコメントのログ dt STRING, event STRING Event ごと); フォトのイイネ!のログ User Event のすべてのログを1つのHiveテーブルで管 理 PARTITION で User Event の種類ごとに「区切る」 各ログにどのような値が含まれるかは,YAMLで別定義
  21. 21. JSON parser 関数を利用CREATE VIEW voice_createASSELECT t.dt user, post_time, ….FROM ( SELECT s.dt, s.json FROM log s WHERE event = ‘diary.create)tLATERAL VIEW json_tuple(s.json, ‘user’, ..) 日記コメントを扱うための VIEW AS user, post_time, … 各 UserEvent の VIEW をYAMLファイルから自動生成 Hiveテーブルへのデータの取り込みと VIEW の自動生成はcron で実 行
  22. 22. インタフェースと実体を分離により, インタフェースを自由に変更 User Event Log Hive Table Hive VIEW データ形式はJSONで統一 連想配列の内容は自由に変更
  23. 23. インタフェースと実体を分離により, インタフェースを自由に変更 User Event Log アプリエンジニアのHiveのスキーマ定義などからの解放 Hive Table Hive VIEW データ形式はJSONで統一 連想配列の内容は自由に変更
  24. 24. mixi における解析環境 過去の解析環境の問題点 Hadoop/Hive/Rを利用Hive の機能紹介 PARTITION JSON parser や正規表現Hive 用フレームワーク Honey エンジニアの「たんぽぽなお仕事」からの解放 PARTITION や JSON parser を利用することで, サービス側の変更と Hive を連動

×