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