Hadoop/Hiveを用いたデータ解析基盤の構築




  株式会社サイバーエージェント
  新規開発局
  福田一郎
株式会社サイバーエージェント
                                                          2




自己紹介
名前 : 福田一郎 (フクダ イチロー)
所属 : 株式会社サイバーエージェ...
株式会社サイバーエージェント
                                    3




   アジェンダ
• ログ解析基盤 Patriot
   • Patriot概要
   • システム構成
   • 開発にあたって...
ログ解析基盤 Patriot
株式会社サイバーエージェント
                                      5




  Amebaサービス




ブログ           Pigg



      なう
株式会社サイバーエージェント
                                6




    目的

Amebaサービス全体の
現状把握と未来予測
株式会社サイバーエージェント
                                     7




       理由

    課金系サービス増加
   (Pigg,モバイルゲーム)

PV,UUではユーザの定着率は測れない
...
株式会社サイバーエージェント
                                 8




    方法
  ログを収集・集積

   ログの構造化

 構造化データの解析

ユーザデータとの突き合わせ
株式会社サイバーエージェント
                                           9




         開発体制
システム 2名               インフラ



ICHIRO   SUZUK...
株式会社サイバーエージェント
                                     10




システム構成(1)
【NN,JT,SNN】
2CoreCPU,16GB RAM
各1台

【DN,TT】
4CoreCPU,1...
株式会社サイバーエージェント
                                     11




システム構成(2)
【Utilサーバ】
4CoreCPU,16GB RAM
1TB HDD×4 (RAID1)
全2台
サマリ...
株式会社サイバーエージェント
                                        12




システム構成(3)
【Hadoop関連】
CDH3 (Hadoop0.20,Hive0.5)
Puppet,Nagios...
株式会社サイバーエージェント
                                                  13




         解析フロー


                      ログ整形
      ...
株式会社サイバーエージェント
                                                                    14




               バッチ処理(1)
Ruby DSL...
株式会社サイバーエージェント
                                                                        15




                バッチ処理(2)
Rub...
株式会社サイバーエージェント
                                           16




    バッチ処理(3)
• Pigg行動ログ
   • 2GB/day (gzipファイル)
• 会員データ
•...
株式会社サイバーエージェント
                                    17




   ユーザインタフェース(1)

デイリーサマリ
マンスリーサマリ
定着率レポート
カスタムレポート
株式会社サイバーエージェント
                                      18




     ユーザインタフェース(2)

【HUE】
HiveQLをWEB UI
から直接叩ける
株式会社サイバーエージェント
                                   19




      分析の習慣化
•   全サービスの状況を共有
•   データ抽出依頼を減らす(無くす)
•   プロデューサもHive...
株式会社サイバーエージェント
                                           20




     今後の改善
• ワークフロー(依存関係)
• ログ収集の簡易化
  • Flume,Scribe,Sys...
Hive
株式会社サイバーエージェント
                                      22




         Hiveとは
•   Hadoopのサブプロジェクト
•   Facebookで開発されていた
•   S...
株式会社サイバーエージェント
                                                23




           データモデル
• Primitive
   • int,float,double,...
株式会社サイバーエージェント
                                                        24




            SerDe(1)
• Serialization/Deseria...
株式会社サイバーエージェント
                                                                           25




                        S...
株式会社サイバーエージェント
                                       26




         メタストア
• Hiveの設定やテーブル情報
• デフォルトはDerby
• PatriotではMySQ...
株式会社サイバーエージェント
                                         27




        データストア
• テーブル : HDFS上のディレクトリ
• Partition : テーブルのサブデ...
株式会社サイバーエージェント
                                                  28




           Partition(1)
• Daily,Hourlyでログが分割されている時...
株式会社サイバーエージェント
                                              29




          Partition(2)
LOAD DATA LOCAL INPATH
    '/tm...
株式会社サイバーエージェント
                                               30




             Bucket

• サンプリングに便利
• Map側JOINで効率が良くなる

...
株式会社サイバーエージェント
                                                    31




        データストアまとめ
テーブル      Partition           ...
株式会社サイバーエージェント
                                                 32




        ファイルフォーマット
• TextFile
• SequenceFile
• (RCF...
株式会社サイバーエージェント
                                               33




           HiveQL(1)
• JOIN
• GROUP BY
• UNION ALL
など...
株式会社サイバーエージェント
                                             34




          HiveQL(2)
INSERT OVERWRITE TABLE t1
         ...
株式会社サイバーエージェント
                                                               35




                 HiveQL(3)
• 集計関数
SEL...
株式会社サイバーエージェント
                                                          36




               HiveQL(4)
• UDF,UDAF

add j...
株式会社サイバーエージェント
                                                                             37




                     UD...
株式会社サイバーエージェント
                                               38




    ファイルフォーマットの検討
圧縮形式:gzip,bzip2,LZO
フォーマット:TextFile...
株式会社サイバーエージェント
                                        39




         構築しての感想
•   スケールする安心感
•   Hiveは結構速い(生Hadoopと遜色ない)
•...
質疑応答
ありがとうございました
Upcoming SlideShare
Loading in...5
×

20100930 sig startups

3,497

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,497
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
46
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

20100930 sig startups

  1. 1. Hadoop/Hiveを用いたデータ解析基盤の構築 株式会社サイバーエージェント 新規開発局 福田一郎
  2. 2. 株式会社サイバーエージェント 2 自己紹介 名前 : 福田一郎 (フクダ イチロー) 所属 : 株式会社サイバーエージェント 新規開発局 略歴 : 2008年 新卒入社 AmebaVision → NinjaTrick → Pigg → Patriot(ログ解析基盤) Twitter : @toutou, はてなID : id:ICHIRO
  3. 3. 株式会社サイバーエージェント 3 アジェンダ • ログ解析基盤 Patriot • Patriot概要 • システム構成 • 開発にあたっての思い • Hive • Hiveとは • HiveQL
  4. 4. ログ解析基盤 Patriot
  5. 5. 株式会社サイバーエージェント 5 Amebaサービス ブログ Pigg なう
  6. 6. 株式会社サイバーエージェント 6 目的 Amebaサービス全体の 現状把握と未来予測
  7. 7. 株式会社サイバーエージェント 7 理由 課金系サービス増加 (Pigg,モバイルゲーム) PV,UUではユーザの定着率は測れない ユーザに満足してもらえるサービスに
  8. 8. 株式会社サイバーエージェント 8 方法 ログを収集・集積 ログの構造化 構造化データの解析 ユーザデータとの突き合わせ
  9. 9. 株式会社サイバーエージェント 9 開発体制 システム 2名 インフラ ICHIRO SUZUKI 課金系統括
  10. 10. 株式会社サイバーエージェント 10 システム構成(1) 【NN,JT,SNN】 2CoreCPU,16GB RAM 各1台 【DN,TT】 4CoreCPU,16GB RAM 1TB HDD×4 (RAIDなし), 全18台
  11. 11. 株式会社サイバーエージェント 11 システム構成(2) 【Utilサーバ】 4CoreCPU,16GB RAM 1TB HDD×4 (RAID1) 全2台 サマリDB,Web/APサーバ
  12. 12. 株式会社サイバーエージェント 12 システム構成(3) 【Hadoop関連】 CDH3 (Hadoop0.20,Hive0.5) Puppet,Nagios,Ganglia 【Webアプリ】 Ruby1.8.7,Rails2.3.8 Ext JS3.2.1 HUE1.0.1
  13. 13. 株式会社サイバーエージェント 13 解析フロー ログ整形 Hiveインポート 各サービス Util Hive Job Hadoop クラスタ サマリデータ View サマリDB(MySQL)
  14. 14. 株式会社サイバーエージェント 14 バッチ処理(1) Ruby DSL import { service "mypage_uu_mobile" backup_dir "/log2/mypage_uu_mobile" data { ← ログデータの場所 type "scp" servers ["xxx.yyy.zzz.1", "xxx.yyy.zzz.2"] user "cy_batch" path "/usr/local/tomcat/logs/login/login_amebaId.#{$dt}" } (つづく)
  15. 15. 株式会社サイバーエージェント 15 バッチ処理(2) Ruby DSL cleaning { ← Map/Reduceを用いたログ整形 mapper "#{$home}/lib/mypage_uu_mapper.rb" reducer "#{$home}/lib/unique_key_reducer.rb" } hive_import { ← Hiveインポート mypage_uu { regexp "^([^¥¥t]*)¥¥t$" output "$1" partition "dt" => "#{$dt}", "dev" => "mobile" } } }
  16. 16. 株式会社サイバーエージェント 16 バッチ処理(3) • Pigg行動ログ • 2GB/day (gzipファイル) • 会員データ • プロフィールデータ • 1000万レコード以上
  17. 17. 株式会社サイバーエージェント 17 ユーザインタフェース(1) デイリーサマリ マンスリーサマリ 定着率レポート カスタムレポート
  18. 18. 株式会社サイバーエージェント 18 ユーザインタフェース(2) 【HUE】 HiveQLをWEB UI から直接叩ける
  19. 19. 株式会社サイバーエージェント 19 分析の習慣化 • 全サービスの状況を共有 • データ抽出依頼を減らす(無くす) • プロデューサもHiveQLを書く • データ解析の啓蒙(Rなど)
  20. 20. 株式会社サイバーエージェント 20 今後の改善 • ワークフロー(依存関係) • ログ収集の簡易化 • Flume,Scribe,Syslog • 詳細分析
  21. 21. Hive
  22. 22. 株式会社サイバーエージェント 22 Hiveとは • Hadoopのサブプロジェクト • Facebookで開発されていた • SQLライクな言語でMap/Redを記述 • 同様の試みにPig(スクリプト言語)
  23. 23. 株式会社サイバーエージェント 23 データモデル • Primitive • int,float,double,String • Complex • map<key-type,value-type> • list<element-type> • struct<field-name:field-type>
  24. 24. 株式会社サイバーエージェント 24 SerDe(1) • Serialization/Deserialization • カラムの区切り文字などを定義 CREATE TABLE test(c1 string, c2 int) ROW FORMAT DELIMITED FIELDS TERMINATED BY '¥t' LINES TERMINATED BY '¥n'; c1 c2 ichiro[tab]16 suzuki[tab]51 ichiro 16 suzuki 51
  25. 25. 株式会社サイバーエージェント 25 SerDe(2) 【Apacheログ】 add jar 'hive_contrib.jar' CREATE TABLE apachelog (host STRING, identity STRING, user STRING, time STRING, method STRING, resource STRING, proto STRING, status STRING, size STRING, referer STRING, agent STRING, proctime STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' WITH SERDEPROPERTIES ("input.regex" = "^(.*?) (.*?) (.*?) ¥¥[(.*?)¥¥] ¥"(¥¥S+?)(?: +(.*?) +(¥¥S*?))?¥" (.*?) (.*?) ¥"(.*?)¥" ¥"(.*?)¥" (.*?)$", "output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s %10$s %11$s %12$s");
  26. 26. 株式会社サイバーエージェント 26 メタストア • Hiveの設定やテーブル情報 • デフォルトはDerby • PatriotではMySQLを使用
  27. 27. 株式会社サイバーエージェント 27 データストア • テーブル : HDFS上のディレクトリ • Partition : テーブルのサブディレクトリ • Bucket : テーブル内のファイル
  28. 28. 株式会社サイバーエージェント 28 Partition(1) • Daily,Hourlyでログが分割されている時な どに便利 CREATE TABLE test_part(id string) PARTITIONED BY(date string, dev string);
  29. 29. 株式会社サイバーエージェント 29 Partition(2) LOAD DATA LOCAL INPATH '/tmp/login_2010-09-30_mb.log' INTO TABLE test_part PARTITION( date='2010-09-30', dev='mobile');
  30. 30. 株式会社サイバーエージェント 30 Bucket • サンプリングに便利 • Map側JOINで効率が良くなる CREATE TABLE bucket_test(id string) CLUSTERED BY(id) INTO 32 BUCKETS
  31. 31. 株式会社サイバーエージェント 31 データストアまとめ テーブル Partition Bucket login date=2010-10-01 dev=pc date=2010-10-02 dev=mb
  32. 32. 株式会社サイバーエージェント 32 ファイルフォーマット • TextFile • SequenceFile • (RCFile) CREATE TABLE t1(key int, value string) STORED AS SEQUENCEFILE;
  33. 33. 株式会社サイバーエージェント 33 HiveQL(1) • JOIN • GROUP BY • UNION ALL など SELECT * FROM t1 JOIN t2 ON(t1.a2 = t2.b2);
  34. 34. 株式会社サイバーエージェント 34 HiveQL(2) INSERT OVERWRITE TABLE t1 SELECT * FROM t2; ※ INSERT INTOは存在しない
  35. 35. 株式会社サイバーエージェント 35 HiveQL(3) • 集計関数 SELECT count(1), sum(c1) FROM t1; •パーセント点 percentile(col, p) (参考) http://wiki.apache.org/hadoop/Hive/LanguageManual/UDF
  36. 36. 株式会社サイバーエージェント 36 HiveQL(4) • UDF,UDAF add jar hive-test-1.0-SNAPSHOT.jar; CREATE TEMPORARY FUNCTION md AS 'jp.ameba.patriot.hive.udf.UDFMessageDigest'; SELECT md(id) FROM login;
  37. 37. 株式会社サイバーエージェント 37 UDFの作り方 public class UDFMessageDigest extends UDF { private static final String DEFAULT_ALGORITHM = "SHA-1"; public String evaluate(String s, String algo, boolean upper) { try { StringBuilder builder = new StringBuilder(); MessageDigest md = MessageDigest.getInstance(algo); byte[] digest = md.digest(s.getBytes("ASCII")); ・・・ return builder.toString(); } catch (・・・) } public String evaluate(String s, String algo) { return evaluate(s, algo, false); } }
  38. 38. 株式会社サイバーエージェント 38 ファイルフォーマットの検討 圧縮形式:gzip,bzip2,LZO フォーマット:TextFile,SeqenceFile 圧縮率:bzip2>gzip>LZO インポート時間:LZO>無圧縮>gzip>bzip2 計算時間:無圧縮>LZO>gzip>bzip2 ※シーケンスファイルより丸ごと圧縮の方が圧縮 率は高いがスプリットできない分 計算速度で不利
  39. 39. 株式会社サイバーエージェント 39 構築しての感想 • スケールする安心感 • Hiveは結構速い(生Hadoopと遜色ない) • 気軽にいろいろやってみたくなる • 解析の重要性を啓蒙 → 作って終わりではない
  40. 40. 質疑応答
  41. 41. ありがとうございました
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×