Stats Web avec Hive

   Cas pratique avec
Il était une fois…

Et, et, hadoop est arrivé…
Des stats
Des stats avancées
Encore des stats
Des évènements
•   PageViewEvent
•   PostCurationEvent
•   SearchEvent
•   CommentEvent
•   ShareEvent
•   TopicDeletionEvent
•   UserDeletionEvent
•   …
Première version
•   Compteur de vues : mysql
•   Compteur de visiteurs : mysql
•   Stockages des évènements : mysql
•   Stats par source : Google Analytics
•   Stats par pays : Google Analytics
•   Analyse des évènements : SQL
Rançon du succès
• Taux d’écriture dans mysql
  – Quick fix:




• Espace de stockage
• Google Analytics API lente et approximative
Les besoins
•   Compteur de vues : calcul temps réel
•   Compteur de visiteurs : calcul 1 fois par jour
•   Stockages des évènements : fichiers « à plat »
•   Stats par source : calcul 1 fois par jour
•   Stats par pays : calcul 1 fois par jour
•   Analyse des évènements : à la demande et
    régulièrement
Solution
•   Compteur de vues : Cassandra
•   Compteur de visiteurs : Hive
•   Stockages des évènements : ad hoc HDFS
•   Stats par source : Hive
•   Stats par pays : Hive
•   Analyse des évènements : Hive
Cassandra vs Hbase
• Hbase:
  – « open-source, distributed, versioned, column-
    oriented store modeled after Google's Bigtable »
  – « Bigtable-like capabilities on top of Hadoop and
    HDFS »
• Cassandra:
  – « a BigTable data model running on an Amazon
    Dynamo-like infrastructure »
Cassandra vs Hbase
• Pro Hbase
  – Cluster Hadoop déployé
  – Hive supporte Hbase
• Pro Cassandra
  – Cluster « temps réel » vs cluster « asynchrone »
  – Pas de SPOF (cf Hadoop Namenode)
  – Opérationnellement simple
Hive vs Pig
• Pig
  – « high-level language for expressing data analysis
    programs »
  – « compiler that produces sequences of Map-
    Reduce programs »
• Hive
  – « data warehouse system for Hadoop »
  – « query the data using a SQL-like language »
Hive vs Pig
• Pro Pig:
  – Plus près de l’algorithme Map-Reduce
• Pro Hive
  – SQL-like
ad hoc HDFS vs Flume
• Flume
  – « distributed, reliable, and available service for
    efficiently collecting, aggregating, and moving
    large amounts of log data »
ad hoc HDFS vs Flume
• Pro Flume
  – Fault tolerent
  – Streaming
  – Scalable
  – Agrégation
• Anti Flume
  – Encore une techno à déployer
  – Encore une techno à apprendre
  – Volume de données encore « faible »
Architecture de Hive




  Source: http://www.javabloger.com/article/apache-hive-jdbc-mapreduce.html
• « workflow scheduler system to manage
  Apache Hadoop jobs »
• Support de Hive

Mais:
• XML comme si il en pleuvait
• Projet en beta en 2011
• Page d’analytics « privée » ?
Scoop-mapred
• Spring MVC webapp
• Embedded Hive
• Quartz Scheduler
Architecture
                        Cassandra
                         Cassandra
                           Cassandra
    view++                                                      Scoop-mapred
             getViews
               getVisitors
                  getTopicSources
scoop                                    TaskTracker             Launch Jobs
  scoop
     web                                   TaskTracker
  frontend                                   TaskTracker

                                                           Launch
                                                           maps &
                                                           reduces   JobTracker
                                                           tasks

                                HDFS
                                 HDFS
                                  HDFS
Calculs Map/Reduce

     Via HiveQL
Hive : CREATE TABLE
CREATE TABLE httpdlogs
   (ip STRING, domain STRING, user STRING,
   date STRING, method STRING, request STRING,
   protocol STRING, status INT, bodySize INT,
   referer STRING, useragent STRING);

LOAD DATA INPATH '/var/log/site_access.log' INTO TABLE
httpdlogs;

SELECT status, COUNT(*) FROM httpdlogs
   WHERE referer = 'www.google.com' GROUP BY status;
Hive : INSERT INTO TABLE
CREATE TABLE google_httpdlogs
   (ip STRING, user STRING, date STRING);

INSERT INTO TABLE google_httpdlogs
   SELECT ip, date FROM httpdlogs WHERE referer LIKE
'%google%';

SELECT * FROM google_httpdlogs WHERE date > '2012-01-15';
Hive : CREATE EXTERNAL TABLE
CREATE EXTERNAL TABLE PageViewEvent
   (date STRING, uri STRING, querystring STRING,
   useragent STRING, referer STRING, ip STRING, …)
   PARTITIONED BY (day STRING)
   ROW FORMAT DELIMITED FIELDS TERMINATED BY 't' LINES
   TERMINATED BY 'n'
   LOCATION '/events/PageViewEvent';

ALTER TABLE PageViewEvent ADD PARTITION (day='20121205')
LOCATION '/events/PageViewEvent/20121205';

SELECT COUNT(*) FROM PageViewEvent
    WHERE day = '20121205' AND date > '2012-12-05 12:00:00' AND
       date < '2012-12-05 13:00:00'
Hive : CREATE ‘Cassandra’ TABLE
CREATE EXTERNAL TABLE CassandraTopicVisitors
   (themeid BIGINT, day STRING, visitors INT)
   STORED BY 'org...cassandra.hadoop.hive.CassandraStorageHandler'
   WITH SERDEPROPERTIES
   ('cassandra.columns.mapping'=':key,:column,:value',
   'cassandra.cf.name'='TopicVistors', 'cassandra.host'='cassandra-1',
   'cassandra.port'='9160')
   TBLPROPERTIES ('cassandra.ks.name’='topic');

INSERT INTO TABLE CassandraTopicVisitors
   SELECT themeid, '2012-12-05', COUNT(DISTINCT userid)
   FROM PageViewEvent WHERE day = '20121205' GROUP BY themeid;
CassandraStorageHandler
• Patches:
   – https://issues.apache.org/jira/browse/CASSANDRA-913
   – https://issues.apache.org/jira/browse/HIVE-1434


• En écriture : nickel
• En lecture : à éviter / à tester
Demo
Bilan

Après 1 an d’utilisation
Les machines
• 4 machines (Intel Xeon 1.87GHz, 8G RAM)
HDFS et les petits fichiers
$ sudo hadoop-fuse-dfs dfs://namenode:8020 ro hdfs

$ du -sh hdfs/events
78G hdfs/events

$ ls -l hdfs/events/GrabbedPostEvent/20121201/grabbing.10.tsv.gz
-rw-r--r-- 1 99 99 2,6M 2012-12-01 07:04 hdfs/events/GrabbedPo[...]

$ ls -l hdfs/events/PageViewEvent/20121201/web-3.6.tsv.gz
-rw-r--r-- 1 99 99 960K 2012-12-01 04:47 hdfs/events/PageViewE[...]

$ du -sh hdfs/apache_logs
360G hdfs/apache_logs
Big Data ?
• Hadoop surdimensionné
• Architecture non triviale
• Déploiement non trivial
                        ~
• Scallable
• Hive rocks : SQL => Map/reduce
• Datamining / Recommendation

Stats web avec Hive chez Scoop.it

  • 1.
    Stats Web avecHive Cas pratique avec
  • 4.
    Il était unefois… Et, et, hadoop est arrivé…
  • 5.
  • 6.
  • 7.
  • 8.
    Des évènements • PageViewEvent • PostCurationEvent • SearchEvent • CommentEvent • ShareEvent • TopicDeletionEvent • UserDeletionEvent • …
  • 9.
    Première version • Compteur de vues : mysql • Compteur de visiteurs : mysql • Stockages des évènements : mysql • Stats par source : Google Analytics • Stats par pays : Google Analytics • Analyse des évènements : SQL
  • 10.
    Rançon du succès •Taux d’écriture dans mysql – Quick fix: • Espace de stockage • Google Analytics API lente et approximative
  • 11.
    Les besoins • Compteur de vues : calcul temps réel • Compteur de visiteurs : calcul 1 fois par jour • Stockages des évènements : fichiers « à plat » • Stats par source : calcul 1 fois par jour • Stats par pays : calcul 1 fois par jour • Analyse des évènements : à la demande et régulièrement
  • 12.
    Solution • Compteur de vues : Cassandra • Compteur de visiteurs : Hive • Stockages des évènements : ad hoc HDFS • Stats par source : Hive • Stats par pays : Hive • Analyse des évènements : Hive
  • 13.
    Cassandra vs Hbase •Hbase: – « open-source, distributed, versioned, column- oriented store modeled after Google's Bigtable » – « Bigtable-like capabilities on top of Hadoop and HDFS » • Cassandra: – « a BigTable data model running on an Amazon Dynamo-like infrastructure »
  • 14.
    Cassandra vs Hbase •Pro Hbase – Cluster Hadoop déployé – Hive supporte Hbase • Pro Cassandra – Cluster « temps réel » vs cluster « asynchrone » – Pas de SPOF (cf Hadoop Namenode) – Opérationnellement simple
  • 15.
    Hive vs Pig •Pig – « high-level language for expressing data analysis programs » – « compiler that produces sequences of Map- Reduce programs » • Hive – « data warehouse system for Hadoop » – « query the data using a SQL-like language »
  • 16.
    Hive vs Pig •Pro Pig: – Plus près de l’algorithme Map-Reduce • Pro Hive – SQL-like
  • 17.
    ad hoc HDFSvs Flume • Flume – « distributed, reliable, and available service for efficiently collecting, aggregating, and moving large amounts of log data »
  • 18.
    ad hoc HDFSvs Flume • Pro Flume – Fault tolerent – Streaming – Scalable – Agrégation • Anti Flume – Encore une techno à déployer – Encore une techno à apprendre – Volume de données encore « faible »
  • 19.
    Architecture de Hive Source: http://www.javabloger.com/article/apache-hive-jdbc-mapreduce.html
  • 20.
    • « workflowscheduler system to manage Apache Hadoop jobs » • Support de Hive Mais: • XML comme si il en pleuvait • Projet en beta en 2011 • Page d’analytics « privée » ?
  • 21.
    Scoop-mapred • Spring MVCwebapp • Embedded Hive • Quartz Scheduler
  • 22.
    Architecture Cassandra Cassandra Cassandra view++ Scoop-mapred getViews getVisitors getTopicSources scoop TaskTracker Launch Jobs scoop web TaskTracker frontend TaskTracker Launch maps & reduces JobTracker tasks HDFS HDFS HDFS
  • 23.
  • 24.
    Hive : CREATETABLE CREATE TABLE httpdlogs (ip STRING, domain STRING, user STRING, date STRING, method STRING, request STRING, protocol STRING, status INT, bodySize INT, referer STRING, useragent STRING); LOAD DATA INPATH '/var/log/site_access.log' INTO TABLE httpdlogs; SELECT status, COUNT(*) FROM httpdlogs WHERE referer = 'www.google.com' GROUP BY status;
  • 25.
    Hive : INSERTINTO TABLE CREATE TABLE google_httpdlogs (ip STRING, user STRING, date STRING); INSERT INTO TABLE google_httpdlogs SELECT ip, date FROM httpdlogs WHERE referer LIKE '%google%'; SELECT * FROM google_httpdlogs WHERE date > '2012-01-15';
  • 26.
    Hive : CREATEEXTERNAL TABLE CREATE EXTERNAL TABLE PageViewEvent (date STRING, uri STRING, querystring STRING, useragent STRING, referer STRING, ip STRING, …) PARTITIONED BY (day STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY 't' LINES TERMINATED BY 'n' LOCATION '/events/PageViewEvent'; ALTER TABLE PageViewEvent ADD PARTITION (day='20121205') LOCATION '/events/PageViewEvent/20121205'; SELECT COUNT(*) FROM PageViewEvent WHERE day = '20121205' AND date > '2012-12-05 12:00:00' AND date < '2012-12-05 13:00:00'
  • 27.
    Hive : CREATE‘Cassandra’ TABLE CREATE EXTERNAL TABLE CassandraTopicVisitors (themeid BIGINT, day STRING, visitors INT) STORED BY 'org...cassandra.hadoop.hive.CassandraStorageHandler' WITH SERDEPROPERTIES ('cassandra.columns.mapping'=':key,:column,:value', 'cassandra.cf.name'='TopicVistors', 'cassandra.host'='cassandra-1', 'cassandra.port'='9160') TBLPROPERTIES ('cassandra.ks.name’='topic'); INSERT INTO TABLE CassandraTopicVisitors SELECT themeid, '2012-12-05', COUNT(DISTINCT userid) FROM PageViewEvent WHERE day = '20121205' GROUP BY themeid;
  • 28.
    CassandraStorageHandler • Patches: – https://issues.apache.org/jira/browse/CASSANDRA-913 – https://issues.apache.org/jira/browse/HIVE-1434 • En écriture : nickel • En lecture : à éviter / à tester
  • 29.
  • 30.
    Bilan Après 1 and’utilisation
  • 31.
    Les machines • 4machines (Intel Xeon 1.87GHz, 8G RAM)
  • 32.
    HDFS et lespetits fichiers $ sudo hadoop-fuse-dfs dfs://namenode:8020 ro hdfs $ du -sh hdfs/events 78G hdfs/events $ ls -l hdfs/events/GrabbedPostEvent/20121201/grabbing.10.tsv.gz -rw-r--r-- 1 99 99 2,6M 2012-12-01 07:04 hdfs/events/GrabbedPo[...] $ ls -l hdfs/events/PageViewEvent/20121201/web-3.6.tsv.gz -rw-r--r-- 1 99 99 960K 2012-12-01 04:47 hdfs/events/PageViewE[...] $ du -sh hdfs/apache_logs 360G hdfs/apache_logs
  • 33.
    Big Data ? •Hadoop surdimensionné • Architecture non triviale • Déploiement non trivial ~ • Scallable • Hive rocks : SQL => Map/reduce • Datamining / Recommendation