Présentation de l'architecture de calcul de statistique web chez Scoop.it, basé sur Hadoop+Hive, présentation faite lors de la session du 13 Décembre 2012 du Jug Toulouse
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 HDFS vs Flume
• Flume
– « distributed, reliable, and available service for
efficiently collecting, aggregating, and moving
large amounts of log data »
18. 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 »
19. Architecture de Hive
Source: http://www.javabloger.com/article/apache-hive-jdbc-mapreduce.html
20. • « 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 » ?
24. 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;
25. 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';
26. 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'
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