stats web avec hive chez scoop.it

33
Stats Web avec Hive Cas pratique avec

Upload: hibnico

Post on 01-Jul-2015

564 views

Category:

Technology


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Stats web avec Hive chez Scoop.it

Stats Web avec Hive

Cas pratique avec

Page 2: Stats web avec Hive chez Scoop.it
Page 3: Stats web avec Hive chez Scoop.it
Page 4: Stats web avec Hive chez Scoop.it

Il était une fois…

Et, et, hadoop est arrivé…

Page 5: Stats web avec Hive chez Scoop.it

Des stats

Page 6: Stats web avec Hive chez Scoop.it

Des stats avancées

Page 7: Stats web avec Hive chez Scoop.it

Encore des stats

Page 8: Stats web avec Hive chez Scoop.it

Des évènements

• PageViewEvent• PostCurationEvent• SearchEvent• CommentEvent• ShareEvent• TopicDeletionEvent• UserDeletionEvent• …

Page 9: Stats web avec Hive chez Scoop.it

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

Page 10: Stats web avec Hive chez Scoop.it

Rançon du succès

• Taux d’écriture dans mysql– Quick fix:

• Espace de stockage• Google Analytics API lente et approximative

Page 11: Stats web avec Hive chez Scoop.it

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

Page 12: Stats web avec Hive chez Scoop.it

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

Page 13: Stats web avec Hive chez Scoop.it

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 »

Page 14: Stats web avec Hive chez Scoop.it

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

Page 15: Stats web avec Hive chez Scoop.it

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 »

Page 16: Stats web avec Hive chez Scoop.it

Hive vs Pig

• Pro Pig:– Plus près de l’algorithme Map-Reduce

• Pro Hive– SQL-like

Page 17: Stats web avec Hive chez Scoop.it

ad hoc HDFS vs Flume

• Flume– « distributed, reliable, and available service for

efficiently collecting, aggregating, and moving large amounts of log data »

Page 18: Stats web avec Hive chez Scoop.it

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 »

Page 19: Stats web avec Hive chez Scoop.it

Architecture de Hive

Source: http://www.javabloger.com/article/apache-hive-jdbc-mapreduce.html

Page 20: Stats web avec Hive chez Scoop.it

• « 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 » ?

Page 21: Stats web avec Hive chez Scoop.it

Scoop-mapred

• Spring MVC webapp• Embedded Hive• Quartz Scheduler

Page 22: Stats web avec Hive chez Scoop.it

Architecture

scoopscoopwebfrontend

Cassandra

HDFS

view++

évènements

Scoop-mapredgetViews

getVisitors

JobTracker

TaskTrackerTaskTracker

TaskTracker

HDFSHDFS

CassandraCassandra

Launch maps & reducestasks

Launch Jobs

getTopicSources

Page 23: Stats web avec Hive chez Scoop.it

Calculs Map/Reduce

Via HiveQL

Page 24: Stats web avec Hive chez Scoop.it

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 httpdlogsWHERE referer = 'www.google.com' GROUP BY status;

Page 25: Stats web avec Hive chez Scoop.it

Hive : INSERT INTO TABLE

CREATE TABLE google_httpdlogs(ip STRING, user STRING, date STRING);

INSERT INTO TABLE google_httpdlogsSELECT ip, date FROM httpdlogs WHERE referer LIKE

'%google%';

SELECT * FROM google_httpdlogs WHERE date > '2012-01-15';

Page 26: Stats web avec Hive chez Scoop.it

Hive : CREATE EXTERNAL TABLECREATE 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 PageViewEventWHERE day = '20121205' AND date > '2012-12-05 12:00:00' AND

date < '2012-12-05 13:00:00'

Page 27: Stats web avec Hive chez Scoop.it

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 CassandraTopicVisitorsSELECT themeid, '2012-12-05', COUNT(DISTINCT userid)FROM PageViewEvent WHERE day = '20121205' GROUP BY

themeid;

Page 28: Stats web avec Hive chez Scoop.it

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

Page 29: Stats web avec Hive chez Scoop.it

Demo

Page 30: Stats web avec Hive chez Scoop.it

Bilan

Après 1 an d’utilisation

Page 31: Stats web avec Hive chez Scoop.it

Les machines

• 4 machines (Intel Xeon 1.87GHz, 8G RAM)

Page 32: Stats web avec Hive chez Scoop.it

HDFS et les petits fichiers$ sudo hadoop-fuse-dfs dfs://namenode:8020 ro hdfs

$ du -sh hdfs/events78G 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_logs360G hdfs/apache_logs

Page 33: Stats web avec Hive chez Scoop.it

Big Data ?

• Hadoop surdimensionné• Architecture non triviale• Déploiement non trivial

~• Scallable• Hive rocks : SQL => Map/reduce• Datamining / Recommendation