SlideShare a Scribd company logo
1 of 41
Download to read offline
Hadoop/Hiveを用いたデータ解析基盤の構築




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




自己紹介
名前 : 福田一郎 (フクダ イチロー)
所属 : 株式会社サイバーエージェント 新規開発局
略歴 : 2008年 新卒入社
        AmebaVision → NinjaTrick → Pigg
                                 → Patriot(ログ解析基盤)
Twitter : @toutou, はてなID : id:ICHIRO
株式会社サイバーエージェント
                                    3




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




  Amebaサービス




ブログ           Pigg



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




    目的

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




       理由

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

PV,UUではユーザの定着率は測れない

ユーザに満足してもらえるサービスに
株式会社サイバーエージェント
                                 8




    方法
  ログを収集・集積

   ログの構造化

 構造化データの解析

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




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



ICHIRO   SUZUKI




                  課金系統括
株式会社サイバーエージェント
                                     10




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

【DN,TT】
4CoreCPU,16GB RAM
1TB HDD×4 (RAIDなし),
全18台
株式会社サイバーエージェント
                                     11




システム構成(2)
【Utilサーバ】
4CoreCPU,16GB RAM
1TB HDD×4 (RAID1)
全2台
サマリDB,Web/APサーバ
株式会社サイバーエージェント
                                        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




         解析フロー


                      ログ整形
                   Hiveインポート
各サービス       Util     Hive Job
                                Hadoop
                                クラスタ

                        サマリデータ

  View   サマリDB(MySQL)
株式会社サイバーエージェント
                                                                    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




                バッチ処理(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




    バッチ処理(3)
• Pigg行動ログ
   • 2GB/day (gzipファイル)
• 会員データ
• プロフィールデータ
   • 1000万レコード以上
株式会社サイバーエージェント
                                    17




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

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




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

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




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




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




         Hiveとは
•   Hadoopのサブプロジェクト
•   Facebookで開発されていた
•   SQLライクな言語でMap/Redを記述
•   同様の試みにPig(スクリプト言語)
株式会社サイバーエージェント
                                                23




           データモデル
• Primitive
   • int,float,double,String

• Complex
  • map<key-type,value-type>
  • list<element-type>
  • struct<field-name:field-type>
株式会社サイバーエージェント
                                                        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




                        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




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




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




           Partition(1)
• Daily,Hourlyでログが分割されている時な
どに便利

CREATE TABLE test_part(id string)
PARTITIONED BY(date string, dev string);
株式会社サイバーエージェント
                                              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




             Bucket

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

CREATE TABLE bucket_test(id string)
CLUSTERED BY(id) INTO 32 BUCKETS
株式会社サイバーエージェント
                                                    31




        データストアまとめ
テーブル      Partition                   Bucket



login   date=2010-10-01 dev=pc



        date=2010-10-02
                          dev=mb
株式会社サイバーエージェント
                                                 32




        ファイルフォーマット
• TextFile
• SequenceFile
• (RCFile)

CREATE TABLE t1(key int, value string)
   STORED AS SEQUENCEFILE;
株式会社サイバーエージェント
                                               33




           HiveQL(1)
• JOIN
• GROUP BY
• UNION ALL
など

SELECT * FROM t1
       JOIN t2 ON(t1.a2 = t2.b2);
株式会社サイバーエージェント
                                             34




          HiveQL(2)
INSERT OVERWRITE TABLE t1
               SELECT * FROM t2;

※ INSERT INTOは存在しない
株式会社サイバーエージェント
                                                               35




                 HiveQL(3)
• 集計関数
SELECT count(1), sum(c1) FROM t1;
  •パーセント点
    percentile(col, p)
(参考)
http://wiki.apache.org/hadoop/Hive/LanguageManual/UDF
株式会社サイバーエージェント
                                                          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




                     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




    ファイルフォーマットの検討
圧縮形式:gzip,bzip2,LZO
フォーマット:TextFile,SeqenceFile

圧縮率:bzip2>gzip>LZO
インポート時間:LZO>無圧縮>gzip>bzip2
計算時間:無圧縮>LZO>gzip>bzip2

※シーケンスファイルより丸ごと圧縮の方が圧縮
率は高いがスプリットできない分 計算速度で不利
株式会社サイバーエージェント
                                        39




         構築しての感想
•   スケールする安心感
•   Hiveは結構速い(生Hadoopと遜色ない)
•   気軽にいろいろやってみたくなる
•   解析の重要性を啓蒙
    → 作って終わりではない
質疑応答
ありがとうございました

More Related Content

What's hot

Map server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 HokkaidoMap server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 HokkaidoHideo Harada
 
「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisitedUptime Technologies LLC (JP)
 
PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017Shigeru Hanada
 
Jpug study-pq 20170121
Jpug study-pq 20170121Jpug study-pq 20170121
Jpug study-pq 20170121Kosuke Kida
 
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...Insight Technology, Inc.
 
外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張Shigeru Hanada
 
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告Uptime Technologies LLC (JP)
 
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009Ryota Watabe
 
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]Kohei KaiGai
 
Qtiles plugin for QGIS
Qtiles plugin for QGISQtiles plugin for QGIS
Qtiles plugin for QGISHideo Harada
 
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
DynamoDB   MyNA・JPUG合同DB勉強会 in 東京DynamoDB   MyNA・JPUG合同DB勉強会 in 東京
DynamoDB MyNA・JPUG合同DB勉強会 in 東京Yuko Mori
 
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~Ryota Watabe
 
PostgreSQL Conference Japan 2021 B2 Citus 10
PostgreSQL Conference Japan 2021 B2 Citus 10PostgreSQL Conference Japan 2021 B2 Citus 10
PostgreSQL Conference Japan 2021 B2 Citus 10Noriyoshi Shinoda
 
Lt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdwLt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdwToshi Harada
 
Apache Drill で見る Twitter の世界
Apache Drill で見る Twitter の世界Apache Drill で見る Twitter の世界
Apache Drill で見る Twitter の世界Masaru Watanabe
 
20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)Hiromu Shioya
 
Dat009 クラウドでビック
Dat009 クラウドでビックDat009 クラウドでビック
Dat009 クラウドでビックTech Summit 2016
 

What's hot (20)

Map server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 HokkaidoMap server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 Hokkaido
 
「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited
 
PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017
 
Jpug study-pq 20170121
Jpug study-pq 20170121Jpug study-pq 20170121
Jpug study-pq 20170121
 
Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
 
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
[db tech showcase Tokyo 2017] D15: ビッグデータ x 機械学習の高速分析をVerticaで実現!by ヒューレット・パッ...
 
外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張
 
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
 
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
 
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
 
Hadoop - OSC2010 Tokyo/Spring
Hadoop - OSC2010 Tokyo/SpringHadoop - OSC2010 Tokyo/Spring
Hadoop - OSC2010 Tokyo/Spring
 
Qtiles plugin for QGIS
Qtiles plugin for QGISQtiles plugin for QGIS
Qtiles plugin for QGIS
 
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
DynamoDB   MyNA・JPUG合同DB勉強会 in 東京DynamoDB   MyNA・JPUG合同DB勉強会 in 東京
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
 
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
 
JSONBはPostgreSQL9.5でいかに改善されたのか
JSONBはPostgreSQL9.5でいかに改善されたのかJSONBはPostgreSQL9.5でいかに改善されたのか
JSONBはPostgreSQL9.5でいかに改善されたのか
 
PostgreSQL Conference Japan 2021 B2 Citus 10
PostgreSQL Conference Japan 2021 B2 Citus 10PostgreSQL Conference Japan 2021 B2 Citus 10
PostgreSQL Conference Japan 2021 B2 Citus 10
 
Lt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdwLt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdw
 
Apache Drill で見る Twitter の世界
Apache Drill で見る Twitter の世界Apache Drill で見る Twitter の世界
Apache Drill で見る Twitter の世界
 
20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)
 
Dat009 クラウドでビック
Dat009 クラウドでビックDat009 クラウドでビック
Dat009 クラウドでビック
 

Similar to 20100930 sig startups

WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料Recruit Technologies
 
Hadoop conferencejapan2011
Hadoop conferencejapan2011Hadoop conferencejapan2011
Hadoop conferencejapan2011Ichiro Fukuda
 
既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~じゅん なかざ
 
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けRecruit Technologies
 
Developers.IO 2019 Effective Datalake
Developers.IO 2019 Effective DatalakeDevelopers.IO 2019 Effective Datalake
Developers.IO 2019 Effective DatalakeSatoru Ishikawa
 
20130313 OSCA Hadoopセミナー
20130313 OSCA Hadoopセミナー20130313 OSCA Hadoopセミナー
20130313 OSCA HadoopセミナーIchiro Fukuda
 
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC EnterpriseYusukeKuramata
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムRecruit Technologies
 
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version - ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version - Tetsutaro Watanabe
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回Naoyuki Yamada
 
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門じゅん なかざ
 
20160115nodered design patterns
20160115nodered design patterns20160115nodered design patterns
20160115nodered design patternsBMXUG
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osakaNaotaka Jay HOTTA
 
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏Developers Summit
 
Hadoopによるリクルートでの技術調査とその活用
Hadoopによるリクルートでの技術調査とその活用Hadoopによるリクルートでの技術調査とその活用
Hadoopによるリクルートでの技術調査とその活用Chiaki Hatanaka
 
トレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解するトレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解するTakahiro Inoue
 
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11MapR Technologies Japan
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)NTT DATA Technology & Innovation
 
【ハンズオンセミナー】NoSQL/SQLデュアルインタフェースを備えたIoT向けデータベースGridDB ~ GridDB CE 4.6のテーブルパーティ...
【ハンズオンセミナー】NoSQL/SQLデュアルインタフェースを備えたIoT向けデータベースGridDB ~ GridDB CE 4.6のテーブルパーティ...【ハンズオンセミナー】NoSQL/SQLデュアルインタフェースを備えたIoT向けデータベースGridDB ~ GridDB CE 4.6のテーブルパーティ...
【ハンズオンセミナー】NoSQL/SQLデュアルインタフェースを備えたIoT向けデータベースGridDB ~ GridDB CE 4.6のテーブルパーティ...griddb
 

Similar to 20100930 sig startups (20)

WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料
 
Hadoop conferencejapan2011
Hadoop conferencejapan2011Hadoop conferencejapan2011
Hadoop conferencejapan2011
 
既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~
 
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分け
 
Developers.IO 2019 Effective Datalake
Developers.IO 2019 Effective DatalakeDevelopers.IO 2019 Effective Datalake
Developers.IO 2019 Effective Datalake
 
20130313 OSCA Hadoopセミナー
20130313 OSCA Hadoopセミナー20130313 OSCA Hadoopセミナー
20130313 OSCA Hadoopセミナー
 
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラム
 
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version - ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門
 
20160115nodered design patterns
20160115nodered design patterns20160115nodered design patterns
20160115nodered design patterns
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
 
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
 
Hadoopによるリクルートでの技術調査とその活用
Hadoopによるリクルートでの技術調査とその活用Hadoopによるリクルートでの技術調査とその活用
Hadoopによるリクルートでの技術調査とその活用
 
トレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解するトレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解する
 
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
 
【ハンズオンセミナー】NoSQL/SQLデュアルインタフェースを備えたIoT向けデータベースGridDB ~ GridDB CE 4.6のテーブルパーティ...
【ハンズオンセミナー】NoSQL/SQLデュアルインタフェースを備えたIoT向けデータベースGridDB ~ GridDB CE 4.6のテーブルパーティ...【ハンズオンセミナー】NoSQL/SQLデュアルインタフェースを備えたIoT向けデータベースGridDB ~ GridDB CE 4.6のテーブルパーティ...
【ハンズオンセミナー】NoSQL/SQLデュアルインタフェースを備えたIoT向けデータベースGridDB ~ GridDB CE 4.6のテーブルパーティ...
 
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャーNode.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
 

Recently uploaded

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Recently uploaded (9)

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

20100930 sig startups

  • 2. 株式会社サイバーエージェント 2 自己紹介 名前 : 福田一郎 (フクダ イチロー) 所属 : 株式会社サイバーエージェント 新規開発局 略歴 : 2008年 新卒入社 AmebaVision → NinjaTrick → Pigg → Patriot(ログ解析基盤) Twitter : @toutou, はてなID : id:ICHIRO
  • 3. 株式会社サイバーエージェント 3 アジェンダ • ログ解析基盤 Patriot • Patriot概要 • システム構成 • 開発にあたっての思い • Hive • Hiveとは • HiveQL
  • 5. 株式会社サイバーエージェント 5 Amebaサービス ブログ Pigg なう
  • 6. 株式会社サイバーエージェント 6 目的 Amebaサービス全体の 現状把握と未来予測
  • 7. 株式会社サイバーエージェント 7 理由 課金系サービス増加 (Pigg,モバイルゲーム) PV,UUではユーザの定着率は測れない ユーザに満足してもらえるサービスに
  • 8. 株式会社サイバーエージェント 8 方法 ログを収集・集積 ログの構造化 構造化データの解析 ユーザデータとの突き合わせ
  • 9. 株式会社サイバーエージェント 9 開発体制 システム 2名 インフラ ICHIRO SUZUKI 課金系統括
  • 10. 株式会社サイバーエージェント 10 システム構成(1) 【NN,JT,SNN】 2CoreCPU,16GB RAM 各1台 【DN,TT】 4CoreCPU,16GB RAM 1TB HDD×4 (RAIDなし), 全18台
  • 11. 株式会社サイバーエージェント 11 システム構成(2) 【Utilサーバ】 4CoreCPU,16GB RAM 1TB HDD×4 (RAID1) 全2台 サマリDB,Web/APサーバ
  • 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 解析フロー ログ整形 Hiveインポート 各サービス Util Hive Job Hadoop クラスタ サマリデータ View サマリDB(MySQL)
  • 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 バッチ処理(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 バッチ処理(3) • Pigg行動ログ • 2GB/day (gzipファイル) • 会員データ • プロフィールデータ • 1000万レコード以上
  • 17. 株式会社サイバーエージェント 17 ユーザインタフェース(1) デイリーサマリ マンスリーサマリ 定着率レポート カスタムレポート
  • 18. 株式会社サイバーエージェント 18 ユーザインタフェース(2) 【HUE】 HiveQLをWEB UI から直接叩ける
  • 19. 株式会社サイバーエージェント 19 分析の習慣化 • 全サービスの状況を共有 • データ抽出依頼を減らす(無くす) • プロデューサもHiveQLを書く • データ解析の啓蒙(Rなど)
  • 20. 株式会社サイバーエージェント 20 今後の改善 • ワークフロー(依存関係) • ログ収集の簡易化 • Flume,Scribe,Syslog • 詳細分析
  • 21. Hive
  • 22. 株式会社サイバーエージェント 22 Hiveとは • Hadoopのサブプロジェクト • Facebookで開発されていた • SQLライクな言語でMap/Redを記述 • 同様の試みにPig(スクリプト言語)
  • 23. 株式会社サイバーエージェント 23 データモデル • Primitive • int,float,double,String • Complex • map<key-type,value-type> • list<element-type> • struct<field-name:field-type>
  • 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 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 メタストア • Hiveの設定やテーブル情報 • デフォルトはDerby • PatriotではMySQLを使用
  • 27. 株式会社サイバーエージェント 27 データストア • テーブル : HDFS上のディレクトリ • Partition : テーブルのサブディレクトリ • Bucket : テーブル内のファイル
  • 28. 株式会社サイバーエージェント 28 Partition(1) • Daily,Hourlyでログが分割されている時な どに便利 CREATE TABLE test_part(id string) PARTITIONED BY(date string, dev string);
  • 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 Bucket • サンプリングに便利 • Map側JOINで効率が良くなる CREATE TABLE bucket_test(id string) CLUSTERED BY(id) INTO 32 BUCKETS
  • 31. 株式会社サイバーエージェント 31 データストアまとめ テーブル Partition Bucket login date=2010-10-01 dev=pc date=2010-10-02 dev=mb
  • 32. 株式会社サイバーエージェント 32 ファイルフォーマット • TextFile • SequenceFile • (RCFile) CREATE TABLE t1(key int, value string) STORED AS SEQUENCEFILE;
  • 33. 株式会社サイバーエージェント 33 HiveQL(1) • JOIN • GROUP BY • UNION ALL など SELECT * FROM t1 JOIN t2 ON(t1.a2 = t2.b2);
  • 34. 株式会社サイバーエージェント 34 HiveQL(2) INSERT OVERWRITE TABLE t1 SELECT * FROM t2; ※ INSERT INTOは存在しない
  • 35. 株式会社サイバーエージェント 35 HiveQL(3) • 集計関数 SELECT count(1), sum(c1) FROM t1; •パーセント点 percentile(col, p) (参考) http://wiki.apache.org/hadoop/Hive/LanguageManual/UDF
  • 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 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 ファイルフォーマットの検討 圧縮形式:gzip,bzip2,LZO フォーマット:TextFile,SeqenceFile 圧縮率:bzip2>gzip>LZO インポート時間:LZO>無圧縮>gzip>bzip2 計算時間:無圧縮>LZO>gzip>bzip2 ※シーケンスファイルより丸ごと圧縮の方が圧縮 率は高いがスプリットできない分 計算速度で不利
  • 39. 株式会社サイバーエージェント 39 構築しての感想 • スケールする安心感 • Hiveは結構速い(生Hadoopと遜色ない) • 気軽にいろいろやってみたくなる • 解析の重要性を啓蒙 → 作って終わりではない