SlideShare a Scribd company logo
1 of 62
Download to read offline
Jak postavit nástroj
pro datovou analýzu
Lukáš Antalov, Vedoucí týmu vývoje
Outline
•  Čo sú veľké data?
•  Hadoop
     –  HDFS
     –  MapReduce
     –  Hive
•  Webová analytika a Hadoop
     –  Zber dát
     –  Spracovávanie
     –  Agregácia




www.seznam.cz
Čo sú veľké
data?
Ako veľké sú veľké data
•  Google spracuje 20 PB za deň (2008)




www.seznam.cz
Ako veľké sú veľké data
•  Google spracuje 20 PB za deň (2008)
•  Facebook príjme denne 500 TB (2012)




www.seznam.cz
Ako veľké sú veľké data
•  Google spracuje 20 PB za deň (2008)
•  Facebook príjme denne 500 TB (2012)
•  Seznam Analytika zozbiera denne 500GB




www.seznam.cz
Využitie dát
•  Webová analytika
      –  Analýza chovania uživateľov
      –  AB Testovanie
•    Cielená reklama
•    Trendy
•    Odporúčania
•    …




www.seznam.cz
Spracovávanie dát
•  Sériové spracovávanie je bottleneck




www.seznam.cz
Spracovávanie dát
•  Sériové spracovávanie je bottleneck
•  Rýchla kalkulácia:
     –  Typická rýchlosť čítania z disku 75 MB/sec
     –  Na 100 GB súbor je potreba 100GB RAM a 22 minút




www.seznam.cz
Rozdeľ a panuj
                “Work”
                                      Partition


       w1         w2         w3

    “worker”    “worker”   “worker”


       r1          r2         r3




                “Result”              Combine

www.seznam.cz
Paralelné spracovávanie je
komplikované
•    Ako pridelíme prácu workerom?
•    Čo ak je tej práce viac ako slotov?
•    Ako sa zachovať ak práca skončí chybou?
•    Ako riadiť distribuovanú synchronizáciu?




www.seznam.cz
Paralelné spracovávanie je
komplikované
•    Ako pridelíme prácu workerom?
•    Čo ak je tej práce viac ako slotov?
•    Ako sa zachovať ak práca skončí chybou?
•    Ako riadiť distribuovanú synchronizáciu?
•    …




     Zdroj:	
  h)p://www.flickr.com/photos/sybrenstuvel/2468506922/	
  


www.seznam.cz
Hadoop
Čo nám Hadoop poskytuje?
•  Data storage
     –  Voliteľná redundancia
     –  Fault-tolerant




www.seznam.cz
Čo nám Hadoop poskytuje?
•  Data storage
     –  Voliteľná redundancia
     –  Fault-tolerant
•  Framework pre distribuované výpočty




www.seznam.cz
Čo nám Hadoop poskytuje?
•  Data storage
     –  Voliteľná redundancia
     –  Fault-tolerant
•  Framework pre distribuované výpočty
•  Koordináciu jobov




www.seznam.cz
Čo nám Hadoop poskytuje?
•  Data storage
     –  Voliteľná redundancia
     –  Fault-tolerant
•  Framework pre distribuované výpočty
•  Koordináciu jobov




  Zdroj:	
  h)p://www.flickr.com/photos/spyndle/3480602438/	
  


www.seznam.cz
Hadoop Stack

                                  Pig               Hive               Cascading
          (Columnar Database)



                                (Data Flow)           (SQL)                (Java)
  HBase




                                                 MapReduce
                                          (Distributed Programming Framework)




                                              HDFS
                                    (Hadoop Distributed File System)




www.seznam.cz
HDFS
•    Distribuovaný súborový systém
•    Redundantný storage
•    Navrhnutý tak, aby spoľahlivo ukladal data na bežnom stroji
•    Očakáva hadrwarové chyby
•    Primárne určený pre veľké súbory




www.seznam.cz
HDFS – súbory a bloky
•  Súbory su uložené ako sada blokov
•  Bloky
     –  64 MB kusy súborov (konfigurovateľné)
     –  Replikujú sa na 3 stroje (konfigurovateľné)




www.seznam.cz
HDFS – súbory a bloky
•  Súbory su uložené ako sada blokov
•  Bloky
     –  64 MB kusy súborov (konfigurovateľné)
     –  Replikujú sa na 3 stroje (konfigurovateľné)


•  NameNode spravuje metadata o súboroch a blokoch
•  SecondaryNameNode udržuje zálohu NameNode dát
•  DataNode ukladá a vydáva bloky




www.seznam.cz
MapReduce
•  Programovací model pre definovanie distribuovaných výpočtov
•  Framework pre organizovanie a vykonávanie výpočtov
•  Open-source implementácia zvaná Hadoop




www.seznam.cz
Typický priebeh MR jobu
•    Iterovanie cez velké množstvo záznamov
                                                 Map
•    Extrakcia dôležitých informácií
•    Prehádzanie a triedenie extrahovaných dát
•    Agregácia dát                               Reduce
•    Vygenerovanie a uloženie výsledku




www.seznam.cz
MapReduce paradigm
•  Implementujú sa len 2 funkcie
     –  Map(k1, v1)            -> list(k2, v2)
     –  Reduce(k2, list(v2))   -> list(v3)
•  Framework sa postará o všetko ostatné*
•  Hodnoty s rovnakým kľúčom idú do rovnakého reduceru




www.seznam.cz
MapReduce – word count príklad
function map(String name, String document):
    for each word w in document:
         emit(w, 1)

function reduce(String word, Iterator partialCounts):
    totalCount = 0
    for each count in partialCounts:
         totalCount += count
    emit(word, totalCount)




www.seznam.cz
MapReduce paradigm – cont.
•  Partioners umožnujú rozhodnúť aký kľúč pojde do ktorého
   reduceru
     –  partition(k’, numPartitions) -> partNumber
•  Combiners sú malé reducery a umožnujú kombinovať výsledky z
   map funkcie predtým ako sú poslané do reduceru
     –  Reduce(k2, list(v2)) -> list(v3)




www.seznam.cz
MapReduce – doplnkové info
•    Výstup z map taskov sa zapisuje na disk
•    Priebežné data sa môžu kopírovať skôr ako dobehne map task
•    Samotny reduce začína až ked dobehnú všetky map tasky
•    Každý reducer dostane kľúče zoradené




www.seznam.cz
MapReduce – joby a tasky
•  Job – uživateľom odoslaná implementácia map a reduce funkci
   nad určitými datami
•  Task – jeden mapper alebo reducer
     –  Neúspešné tasky sa automaticky pustia znova
     –  Tasky v ideálnom prípade majú data lokálne k dispozícii
•  JobTracker – spravuje prijaté joby a deleguje tasky medzi stroje
•  TaskTracker – pýta si od JobTracker prácu a vykonáva tasky




www.seznam.cz
Čo keď je task neúspešný
•  Nie z dôvodu chyby v implementácii.
•  Automatické spúštanie až do N pokusov
•  Po N pokusoch je job neúspešný




www.seznam.cz
Čo keď je task neúspešný
•    Nie z dôvodu chyby v implementácii.
•    Automatické spúštanie až do N pokusov
•    Po N pokusoch je job neúspešný
•    Speculative execution
      –  Spustenie rovnakej práce viackrát
      –  Nie vždy žiadané
      –  1. dokončený výhrava, ostatné dostanú kill




www.seznam.cz
MapReduce – záver
•  Je vhodný pre
     –    Paralelné algoritmy
     –    Grupovanie, filtrovanie, joinovanie..
     –    Offline dávkove joby nad množstvom dát
     –    Analýza dát




www.seznam.cz
MapReduce – záver
•  Je vhodný pre
     –    Paralelné algoritmy
     –    Grupovanie, filtrovanie, joinovanie..
     –    Offline dávkove joby nad množstvom dát
     –    Analýza dát


•  Nie je vhodný pre
     –    Joby potrebujúce zdielať stav
     –    Low-latency joby
     –    Joby nad malým množstvo dát
     –    Hľadanie konkrétnych záznamov




www.seznam.cz
Hive
•    Infraštruktúra pre dátový sklad
•    Systém pre správu a dotazovanie nad štrukturovanými dátami
•    Ukladá data na HDFS
•    Používa MapReduce na výpočty
•    Poskytuje SQL-like dotazovaci jazyk zvaný HiveQL




www.seznam.cz
Hive – dotazy
•  Hive engine dotazy konvertuje do MapReduce kódu
•  Kompilátor vytvára zo zložitejších dotazov acyklický graf
   MapReducu jobov
•  Tie joby sú potom postupne posielané na JobTracker




www.seznam.cz
Hive – architektúra




www.seznam.cz
HiveQL
•  Nespĺňa SQL-92 štandard




www.seznam.cz
HiveQL
•  Nespĺňa SQL-92 štandard
•  DDL
     –  DESCRIBE,CREATE, ALTER, DROP
     –  DATABASE, TABLE, PARTITION, VIEW, FUNCTION, INDEX, COLUMN




www.seznam.cz
HiveQL
•  Nespĺňa SQL-92 štandard
•  DDL
     –  DESCRIBE,CREATE, ALTER, DROP
     –  DATABASE, TABLE, PARTITION, VIEW, FUNCTION, INDEX, COLUMN
•  DML
     –  LOAD DATA, INSERT OVERWRITE, INSERT INTO




www.seznam.cz
HiveQL
•  Nespĺňa SQL-92 štandard
•  DDL
     –  DESCRIBE,CREATE, ALTER, DROP
     –  DATABASE, TABLE, PARTITION, VIEW, FUNCTION, INDEX, COLUMN
•  DML
     –  LOAD DATA, INSERT OVERWRITE, INSERT INTO
•  QL
     –    SELECT, FROM, JOIN, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT
     –    Poddotazy sú povolené len v FROM klauzule
     –    Equi-joins – outer joins a left semi joins
     –    Transformačné scripty
     –    Vlastné operátory a funkcie




www.seznam.cz
Hive – dátové typy
•  Primitívne typy
     –  TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE
     –  BOOLEAN, STRING, TIMESTAMP
•  Komplexné typy
     –  ARRAY<data_type>
     –  MAP<primitive_type, data_type>
     –  STRUCT <col_name : data_type, ...>




www.seznam.cz
Hive – schémata
CREATE TABLE user_info (
   user_id BIGINT,
   name STRING,
   year INT
);

LOAD DATA LOCAL INPATH 'sample/u.data'
OVERWRITE INTO TABLE user_info;




www.seznam.cz
Hive – schémata #2
CREATE TABLE user_info (
   user_id BIGINT,
   name STRING
)
PARTITIONED BY(year INT)
CLUSTERED BY(user_id) INTO 256 BUCKETS;




www.seznam.cz
Hive – schémata #3
CREATE EXTERNAL TABLE visitors_day (
    gsid STRING,
    time INT,
    kind INT
) PARTITIONED BY (year INT, month INT, day INT)
LOCATION '/visitors/day/';




www.seznam.cz
Hive – schémata #3
CREATE EXTERNAL TABLE visitors_day (
    gsid STRING,
    time INT,
    kind INT
) PARTITIONED BY (year INT, month INT, day INT)
LOCATION '/visitors/day/';

•  Expandovaná partícia:
     –  /visitors/day/year=2013/month=3/day=11/




www.seznam.cz
Hive – schémata #4
CREATE EXTERNAL TABLE hit (…)
ROW FORMAT SERDE 'cz.seznam.analytics.serializer.Json'
LOCATION '/www/wa/’;

CREATE EXTERNAL TABLE visitors_hour (…)
ROW FORMAT DELIMITED FIELDS TERMINATED BY 't'
LOCATION '/visitors/hour/';




www.seznam.cz
Seznam Analytika a
Hadoop
Hadoop v Sezname
•  Analytika
     –  32 strojov
•  Sklik
     –  17 strojov (štatistiky)
     –  16 strojov (context)
•  Fulltext
     –  ~230 strojov




www.seznam.cz
Zber dát
•  Klientskú časť zabezpečuje javascript
     –  Velký vs malý zberač




www.seznam.cz
Zber dát
•  Klientskú časť zabezpečuje javascript
     –  Velký vs malý zberač
•  Serverová časť
     –    Logovanie dát v json formátu
     –    Rotovanie logov po 5 minutách
     –    bzip2 kompresia
     –    Čas v UTC




www.seznam.cz
Zber dát
•  Klientskú časť zabezpečuje javascript
     –  Velký vs malý zberač
•  Serverová časť
     –    Logovanie dát v json formátu
     –    Rotovanie logov po 5 minutách
     –    bzip2 kompresia
     –    Čas v UTC
•  O zber sa stará 15 strojov
     –  V špičke (18-19h) až 14500 req/sec
     –  Denne
          •  ~530 miliónov akcii
          •  500 GB dát
          •  Po kompresii 48 GB




www.seznam.cz
Hive tabulky
CREATE EXTERNAL TABLE IF NOT EXISTS hit (
gsid, url, action, query, create_tst, screate_tst, id,
`data` MAP<STRING, STRING>,
http_headers MAP<STRING, STRING>,
)
PARTITIONED BY (year, month, week, day, service, hour)
ROW FORMAT SERDE 'cz.seznam.analytics.serializer.Json'
LOCATION ’/hit_logs/’;

+ Ďaľšie tabulky pre výpočty návštev a ciest




www.seznam.cz
Hive tunning
•    XML-RPC Server s väčšou kontrolou nad priebehom jobov
•    Vlastný deserializátor
•    Distribúcia dát a konfigurácie
•    Funkcie na normalizáciu dát
      –  GeoIP
      –  Extract parametrov z url
      –  Napojenie na analytické aplikačné servery




www.seznam.cz
Spracovávanie dát
•    Regulárne výrazy
•    Kategórie
•    Rozsahy
•    Stromová štruktúra




www.seznam.cz
Spracovávanie dát
•    Regulárne výrazy
•    Kategórie
•    Rozsahy
•    Stromová štruktúra




www.seznam.cz
Spracovávanie dát – report
•  Definícia dimenzií
•  Výber z metrik
•  Voľba granularit




www.seznam.cz
Spracovávanie dát – report
•    Definícia dimenzií
•    Výber z metrik
•    Voľba granularit
•    Na základe konfigurácie sa vygeneruje HiveQL dotaz!




www.seznam.cz
Není to tažké
SELECT
   COUNT(DISTINCT gsid), COUNT(1)
FROM hit
WHERE
   service = “novinky”
   AND year = 2013
   AND month = 2
   AND action = “impress”




www.seznam.cz
Typické workflow
•    Predpočítanie dát – návštevy (MapReduce)
•    Samotný výpočet (Hive)
•    Tvorba dimenzií z výsledku dotazu
•    Agregácia (C++ alebo MapReduce)
•    Zmazanie výpočtov z HDFS




www.seznam.cz
Agregácia
•  Data sú agregované až na 4 úrovniach
•  Optimalizácia pre zobrazovanie v grafoch
•  Počítajú sa kombinácie medzi dimenziami




www.seznam.cz
Demo
Máte dotazy?




www.seznam.cz
Děkuji za pozornost
Lukáš Antalov, Vedoucí týmu vývoje

www.seznam.cz

More Related Content

Similar to Analytika

Mne to na notebooku funguje
Mne to na notebooku fungujeMne to na notebooku funguje
Mne to na notebooku fungujeJuraj Bednar
 
Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?Jano Suchal
 
Nove trendy v html a css
Nove trendy v html a cssNove trendy v html a css
Nove trendy v html a cssTomas Majer
 
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrumCodecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrumTomas Srnka
 
Spracovanie velkych dat MONOGRAM Tech Monday 27.07.2011
Spracovanie velkych dat MONOGRAM Tech Monday 27.07.2011Spracovanie velkych dat MONOGRAM Tech Monday 27.07.2011
Spracovanie velkych dat MONOGRAM Tech Monday 27.07.2011Tomas Majer
 
Model driven story
Model driven storyModel driven story
Model driven storyBoris Bucha
 
Node.js @ Rubyslava
Node.js @ RubyslavaNode.js @ Rubyslava
Node.js @ RubyslavaIvan Srba
 
Require.JS & Backbone.JS
Require.JS & Backbone.JSRequire.JS & Backbone.JS
Require.JS & Backbone.JSsrigi
 
Oracle Business Intelligence Forum
Oracle Business Intelligence ForumOracle Business Intelligence Forum
Oracle Business Intelligence ForumOracleSK
 
Novinky oracle pre oblast datovych skladov
Novinky oracle pre oblast datovych skladovNovinky oracle pre oblast datovych skladov
Novinky oracle pre oblast datovych skladovOracleSK
 
AppMonitor Insight Edition
AppMonitor Insight EditionAppMonitor Insight Edition
AppMonitor Insight EditionAdam Lieskovsky
 
DataCore Software - The one and only Storage Hypervisor
DataCore Software - The one and only Storage HypervisorDataCore Software - The one and only Storage Hypervisor
DataCore Software - The one and only Storage HypervisorASBIS SK
 
Drupal a OOP [DrupalCamp SK 2013]
Drupal a OOP [DrupalCamp SK 2013]Drupal a OOP [DrupalCamp SK 2013]
Drupal a OOP [DrupalCamp SK 2013]David Lukac
 
Drupal a OOP [DrupalCamp SK 2013]
Drupal a OOP [DrupalCamp SK 2013]Drupal a OOP [DrupalCamp SK 2013]
Drupal a OOP [DrupalCamp SK 2013]David Lukac
 
Samuel Hopko & Daniel Rajčan - Cloud Computing
Samuel Hopko & Daniel Rajčan - Cloud ComputingSamuel Hopko & Daniel Rajčan - Cloud Computing
Samuel Hopko & Daniel Rajčan - Cloud ComputingDavinci software
 
Deltacloud Presentation OpenHouse 2010
Deltacloud Presentation OpenHouse 2010Deltacloud Presentation OpenHouse 2010
Deltacloud Presentation OpenHouse 2010Michal Fojtik
 
Konference archivy muzea_praha_2010-custodea
Konference archivy muzea_praha_2010-custodeaKonference archivy muzea_praha_2010-custodea
Konference archivy muzea_praha_2010-custodeahanzlik99
 

Similar to Analytika (20)

Seminar K Datasetom
Seminar K DatasetomSeminar K Datasetom
Seminar K Datasetom
 
Mne to na notebooku funguje
Mne to na notebooku fungujeMne to na notebooku funguje
Mne to na notebooku funguje
 
Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?
 
Nove trendy v html a css
Nove trendy v html a cssNove trendy v html a css
Nove trendy v html a css
 
Nehacknutelny web
Nehacknutelny webNehacknutelny web
Nehacknutelny web
 
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrumCodecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
 
Spracovanie velkych dat MONOGRAM Tech Monday 27.07.2011
Spracovanie velkych dat MONOGRAM Tech Monday 27.07.2011Spracovanie velkych dat MONOGRAM Tech Monday 27.07.2011
Spracovanie velkych dat MONOGRAM Tech Monday 27.07.2011
 
Model driven story
Model driven storyModel driven story
Model driven story
 
Node.js @ Rubyslava
Node.js @ RubyslavaNode.js @ Rubyslava
Node.js @ Rubyslava
 
Require.JS & Backbone.JS
Require.JS & Backbone.JSRequire.JS & Backbone.JS
Require.JS & Backbone.JS
 
Oracle Business Intelligence Forum
Oracle Business Intelligence ForumOracle Business Intelligence Forum
Oracle Business Intelligence Forum
 
Novinky oracle pre oblast datovych skladov
Novinky oracle pre oblast datovych skladovNovinky oracle pre oblast datovych skladov
Novinky oracle pre oblast datovych skladov
 
Ro r
Ro rRo r
Ro r
 
AppMonitor Insight Edition
AppMonitor Insight EditionAppMonitor Insight Edition
AppMonitor Insight Edition
 
DataCore Software - The one and only Storage Hypervisor
DataCore Software - The one and only Storage HypervisorDataCore Software - The one and only Storage Hypervisor
DataCore Software - The one and only Storage Hypervisor
 
Drupal a OOP [DrupalCamp SK 2013]
Drupal a OOP [DrupalCamp SK 2013]Drupal a OOP [DrupalCamp SK 2013]
Drupal a OOP [DrupalCamp SK 2013]
 
Drupal a OOP [DrupalCamp SK 2013]
Drupal a OOP [DrupalCamp SK 2013]Drupal a OOP [DrupalCamp SK 2013]
Drupal a OOP [DrupalCamp SK 2013]
 
Samuel Hopko & Daniel Rajčan - Cloud Computing
Samuel Hopko & Daniel Rajčan - Cloud ComputingSamuel Hopko & Daniel Rajčan - Cloud Computing
Samuel Hopko & Daniel Rajčan - Cloud Computing
 
Deltacloud Presentation OpenHouse 2010
Deltacloud Presentation OpenHouse 2010Deltacloud Presentation OpenHouse 2010
Deltacloud Presentation OpenHouse 2010
 
Konference archivy muzea_praha_2010-custodea
Konference archivy muzea_praha_2010-custodeaKonference archivy muzea_praha_2010-custodea
Konference archivy muzea_praha_2010-custodea
 

More from seznamVyvojari

Odpoledne s vyvojari - mobilni aplikace
Odpoledne s vyvojari - mobilni aplikaceOdpoledne s vyvojari - mobilni aplikace
Odpoledne s vyvojari - mobilni aplikaceseznamVyvojari
 
Content delivery network a video
Content delivery network a videoContent delivery network a video
Content delivery network a videoseznamVyvojari
 
Velké obsahové systémy
Velké obsahové systémyVelké obsahové systémy
Velké obsahové systémyseznamVyvojari
 
Hledání úspor v provozu internetové jedničky
Hledání úspor v provozu internetové jedničkyHledání úspor v provozu internetové jedničky
Hledání úspor v provozu internetové jedničkyseznamVyvojari
 
Sklik - Reklama nejen ve vyhledávání
Sklik - Reklama nejen ve vyhledáváníSklik - Reklama nejen ve vyhledávání
Sklik - Reklama nejen ve vyhledáváníseznamVyvojari
 
Fulltextový vyhledávač
Fulltextový vyhledávačFulltextový vyhledávač
Fulltextový vyhledávačseznamVyvojari
 

More from seznamVyvojari (12)

Odpoledne s vyvojari - mobilni aplikace
Odpoledne s vyvojari - mobilni aplikaceOdpoledne s vyvojari - mobilni aplikace
Odpoledne s vyvojari - mobilni aplikace
 
Content delivery network a video
Content delivery network a videoContent delivery network a video
Content delivery network a video
 
Seznam.cz email
 Seznam.cz email Seznam.cz email
Seznam.cz email
 
Velké obsahové systémy
Velké obsahové systémyVelké obsahové systémy
Velké obsahové systémy
 
Hledání úspor v provozu internetové jedničky
Hledání úspor v provozu internetové jedničkyHledání úspor v provozu internetové jedničky
Hledání úspor v provozu internetové jedničky
 
Nový Email.cz
Nový Email.czNový Email.cz
Nový Email.cz
 
Sklik - Reklama nejen ve vyhledávání
Sklik - Reklama nejen ve vyhledáváníSklik - Reklama nejen ve vyhledávání
Sklik - Reklama nejen ve vyhledávání
 
Fulltextový vyhledávač
Fulltextový vyhledávačFulltextový vyhledávač
Fulltextový vyhledávač
 
Výzkum ve fulltextu
Výzkum ve fulltextuVýzkum ve fulltextu
Výzkum ve fulltextu
 
Seznam na mobilu
Seznam na mobiluSeznam na mobilu
Seznam na mobilu
 
SCRUM v Seznam.cz
SCRUM v Seznam.czSCRUM v Seznam.cz
SCRUM v Seznam.cz
 
Roman kummel
Roman kummelRoman kummel
Roman kummel
 

Analytika

  • 1. Jak postavit nástroj pro datovou analýzu Lukáš Antalov, Vedoucí týmu vývoje
  • 2. Outline •  Čo sú veľké data? •  Hadoop –  HDFS –  MapReduce –  Hive •  Webová analytika a Hadoop –  Zber dát –  Spracovávanie –  Agregácia www.seznam.cz
  • 4. Ako veľké sú veľké data •  Google spracuje 20 PB za deň (2008) www.seznam.cz
  • 5. Ako veľké sú veľké data •  Google spracuje 20 PB za deň (2008) •  Facebook príjme denne 500 TB (2012) www.seznam.cz
  • 6. Ako veľké sú veľké data •  Google spracuje 20 PB za deň (2008) •  Facebook príjme denne 500 TB (2012) •  Seznam Analytika zozbiera denne 500GB www.seznam.cz
  • 7. Využitie dát •  Webová analytika –  Analýza chovania uživateľov –  AB Testovanie •  Cielená reklama •  Trendy •  Odporúčania •  … www.seznam.cz
  • 8. Spracovávanie dát •  Sériové spracovávanie je bottleneck www.seznam.cz
  • 9. Spracovávanie dát •  Sériové spracovávanie je bottleneck •  Rýchla kalkulácia: –  Typická rýchlosť čítania z disku 75 MB/sec –  Na 100 GB súbor je potreba 100GB RAM a 22 minút www.seznam.cz
  • 10. Rozdeľ a panuj “Work” Partition w1 w2 w3 “worker” “worker” “worker” r1 r2 r3 “Result” Combine www.seznam.cz
  • 11. Paralelné spracovávanie je komplikované •  Ako pridelíme prácu workerom? •  Čo ak je tej práce viac ako slotov? •  Ako sa zachovať ak práca skončí chybou? •  Ako riadiť distribuovanú synchronizáciu? www.seznam.cz
  • 12. Paralelné spracovávanie je komplikované •  Ako pridelíme prácu workerom? •  Čo ak je tej práce viac ako slotov? •  Ako sa zachovať ak práca skončí chybou? •  Ako riadiť distribuovanú synchronizáciu? •  … Zdroj:  h)p://www.flickr.com/photos/sybrenstuvel/2468506922/   www.seznam.cz
  • 14. Čo nám Hadoop poskytuje? •  Data storage –  Voliteľná redundancia –  Fault-tolerant www.seznam.cz
  • 15. Čo nám Hadoop poskytuje? •  Data storage –  Voliteľná redundancia –  Fault-tolerant •  Framework pre distribuované výpočty www.seznam.cz
  • 16. Čo nám Hadoop poskytuje? •  Data storage –  Voliteľná redundancia –  Fault-tolerant •  Framework pre distribuované výpočty •  Koordináciu jobov www.seznam.cz
  • 17. Čo nám Hadoop poskytuje? •  Data storage –  Voliteľná redundancia –  Fault-tolerant •  Framework pre distribuované výpočty •  Koordináciu jobov Zdroj:  h)p://www.flickr.com/photos/spyndle/3480602438/   www.seznam.cz
  • 18. Hadoop Stack Pig Hive Cascading (Columnar Database) (Data Flow) (SQL) (Java) HBase MapReduce (Distributed Programming Framework) HDFS (Hadoop Distributed File System) www.seznam.cz
  • 19. HDFS •  Distribuovaný súborový systém •  Redundantný storage •  Navrhnutý tak, aby spoľahlivo ukladal data na bežnom stroji •  Očakáva hadrwarové chyby •  Primárne určený pre veľké súbory www.seznam.cz
  • 20. HDFS – súbory a bloky •  Súbory su uložené ako sada blokov •  Bloky –  64 MB kusy súborov (konfigurovateľné) –  Replikujú sa na 3 stroje (konfigurovateľné) www.seznam.cz
  • 21. HDFS – súbory a bloky •  Súbory su uložené ako sada blokov •  Bloky –  64 MB kusy súborov (konfigurovateľné) –  Replikujú sa na 3 stroje (konfigurovateľné) •  NameNode spravuje metadata o súboroch a blokoch •  SecondaryNameNode udržuje zálohu NameNode dát •  DataNode ukladá a vydáva bloky www.seznam.cz
  • 22. MapReduce •  Programovací model pre definovanie distribuovaných výpočtov •  Framework pre organizovanie a vykonávanie výpočtov •  Open-source implementácia zvaná Hadoop www.seznam.cz
  • 23. Typický priebeh MR jobu •  Iterovanie cez velké množstvo záznamov Map •  Extrakcia dôležitých informácií •  Prehádzanie a triedenie extrahovaných dát •  Agregácia dát Reduce •  Vygenerovanie a uloženie výsledku www.seznam.cz
  • 24. MapReduce paradigm •  Implementujú sa len 2 funkcie –  Map(k1, v1) -> list(k2, v2) –  Reduce(k2, list(v2)) -> list(v3) •  Framework sa postará o všetko ostatné* •  Hodnoty s rovnakým kľúčom idú do rovnakého reduceru www.seznam.cz
  • 25. MapReduce – word count príklad function map(String name, String document): for each word w in document: emit(w, 1) function reduce(String word, Iterator partialCounts): totalCount = 0 for each count in partialCounts: totalCount += count emit(word, totalCount) www.seznam.cz
  • 26. MapReduce paradigm – cont. •  Partioners umožnujú rozhodnúť aký kľúč pojde do ktorého reduceru –  partition(k’, numPartitions) -> partNumber •  Combiners sú malé reducery a umožnujú kombinovať výsledky z map funkcie predtým ako sú poslané do reduceru –  Reduce(k2, list(v2)) -> list(v3) www.seznam.cz
  • 27. MapReduce – doplnkové info •  Výstup z map taskov sa zapisuje na disk •  Priebežné data sa môžu kopírovať skôr ako dobehne map task •  Samotny reduce začína až ked dobehnú všetky map tasky •  Každý reducer dostane kľúče zoradené www.seznam.cz
  • 28. MapReduce – joby a tasky •  Job – uživateľom odoslaná implementácia map a reduce funkci nad určitými datami •  Task – jeden mapper alebo reducer –  Neúspešné tasky sa automaticky pustia znova –  Tasky v ideálnom prípade majú data lokálne k dispozícii •  JobTracker – spravuje prijaté joby a deleguje tasky medzi stroje •  TaskTracker – pýta si od JobTracker prácu a vykonáva tasky www.seznam.cz
  • 29. Čo keď je task neúspešný •  Nie z dôvodu chyby v implementácii. •  Automatické spúštanie až do N pokusov •  Po N pokusoch je job neúspešný www.seznam.cz
  • 30. Čo keď je task neúspešný •  Nie z dôvodu chyby v implementácii. •  Automatické spúštanie až do N pokusov •  Po N pokusoch je job neúspešný •  Speculative execution –  Spustenie rovnakej práce viackrát –  Nie vždy žiadané –  1. dokončený výhrava, ostatné dostanú kill www.seznam.cz
  • 31. MapReduce – záver •  Je vhodný pre –  Paralelné algoritmy –  Grupovanie, filtrovanie, joinovanie.. –  Offline dávkove joby nad množstvom dát –  Analýza dát www.seznam.cz
  • 32. MapReduce – záver •  Je vhodný pre –  Paralelné algoritmy –  Grupovanie, filtrovanie, joinovanie.. –  Offline dávkove joby nad množstvom dát –  Analýza dát •  Nie je vhodný pre –  Joby potrebujúce zdielať stav –  Low-latency joby –  Joby nad malým množstvo dát –  Hľadanie konkrétnych záznamov www.seznam.cz
  • 33. Hive •  Infraštruktúra pre dátový sklad •  Systém pre správu a dotazovanie nad štrukturovanými dátami •  Ukladá data na HDFS •  Používa MapReduce na výpočty •  Poskytuje SQL-like dotazovaci jazyk zvaný HiveQL www.seznam.cz
  • 34. Hive – dotazy •  Hive engine dotazy konvertuje do MapReduce kódu •  Kompilátor vytvára zo zložitejších dotazov acyklický graf MapReducu jobov •  Tie joby sú potom postupne posielané na JobTracker www.seznam.cz
  • 36. HiveQL •  Nespĺňa SQL-92 štandard www.seznam.cz
  • 37. HiveQL •  Nespĺňa SQL-92 štandard •  DDL –  DESCRIBE,CREATE, ALTER, DROP –  DATABASE, TABLE, PARTITION, VIEW, FUNCTION, INDEX, COLUMN www.seznam.cz
  • 38. HiveQL •  Nespĺňa SQL-92 štandard •  DDL –  DESCRIBE,CREATE, ALTER, DROP –  DATABASE, TABLE, PARTITION, VIEW, FUNCTION, INDEX, COLUMN •  DML –  LOAD DATA, INSERT OVERWRITE, INSERT INTO www.seznam.cz
  • 39. HiveQL •  Nespĺňa SQL-92 štandard •  DDL –  DESCRIBE,CREATE, ALTER, DROP –  DATABASE, TABLE, PARTITION, VIEW, FUNCTION, INDEX, COLUMN •  DML –  LOAD DATA, INSERT OVERWRITE, INSERT INTO •  QL –  SELECT, FROM, JOIN, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT –  Poddotazy sú povolené len v FROM klauzule –  Equi-joins – outer joins a left semi joins –  Transformačné scripty –  Vlastné operátory a funkcie www.seznam.cz
  • 40. Hive – dátové typy •  Primitívne typy –  TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE –  BOOLEAN, STRING, TIMESTAMP •  Komplexné typy –  ARRAY<data_type> –  MAP<primitive_type, data_type> –  STRUCT <col_name : data_type, ...> www.seznam.cz
  • 41. Hive – schémata CREATE TABLE user_info ( user_id BIGINT, name STRING, year INT ); LOAD DATA LOCAL INPATH 'sample/u.data' OVERWRITE INTO TABLE user_info; www.seznam.cz
  • 42. Hive – schémata #2 CREATE TABLE user_info ( user_id BIGINT, name STRING ) PARTITIONED BY(year INT) CLUSTERED BY(user_id) INTO 256 BUCKETS; www.seznam.cz
  • 43. Hive – schémata #3 CREATE EXTERNAL TABLE visitors_day ( gsid STRING, time INT, kind INT ) PARTITIONED BY (year INT, month INT, day INT) LOCATION '/visitors/day/'; www.seznam.cz
  • 44. Hive – schémata #3 CREATE EXTERNAL TABLE visitors_day ( gsid STRING, time INT, kind INT ) PARTITIONED BY (year INT, month INT, day INT) LOCATION '/visitors/day/'; •  Expandovaná partícia: –  /visitors/day/year=2013/month=3/day=11/ www.seznam.cz
  • 45. Hive – schémata #4 CREATE EXTERNAL TABLE hit (…) ROW FORMAT SERDE 'cz.seznam.analytics.serializer.Json' LOCATION '/www/wa/’; CREATE EXTERNAL TABLE visitors_hour (…) ROW FORMAT DELIMITED FIELDS TERMINATED BY 't' LOCATION '/visitors/hour/'; www.seznam.cz
  • 47. Hadoop v Sezname •  Analytika –  32 strojov •  Sklik –  17 strojov (štatistiky) –  16 strojov (context) •  Fulltext –  ~230 strojov www.seznam.cz
  • 48. Zber dát •  Klientskú časť zabezpečuje javascript –  Velký vs malý zberač www.seznam.cz
  • 49. Zber dát •  Klientskú časť zabezpečuje javascript –  Velký vs malý zberač •  Serverová časť –  Logovanie dát v json formátu –  Rotovanie logov po 5 minutách –  bzip2 kompresia –  Čas v UTC www.seznam.cz
  • 50. Zber dát •  Klientskú časť zabezpečuje javascript –  Velký vs malý zberač •  Serverová časť –  Logovanie dát v json formátu –  Rotovanie logov po 5 minutách –  bzip2 kompresia –  Čas v UTC •  O zber sa stará 15 strojov –  V špičke (18-19h) až 14500 req/sec –  Denne •  ~530 miliónov akcii •  500 GB dát •  Po kompresii 48 GB www.seznam.cz
  • 51. Hive tabulky CREATE EXTERNAL TABLE IF NOT EXISTS hit ( gsid, url, action, query, create_tst, screate_tst, id, `data` MAP<STRING, STRING>, http_headers MAP<STRING, STRING>, ) PARTITIONED BY (year, month, week, day, service, hour) ROW FORMAT SERDE 'cz.seznam.analytics.serializer.Json' LOCATION ’/hit_logs/’; + Ďaľšie tabulky pre výpočty návštev a ciest www.seznam.cz
  • 52. Hive tunning •  XML-RPC Server s väčšou kontrolou nad priebehom jobov •  Vlastný deserializátor •  Distribúcia dát a konfigurácie •  Funkcie na normalizáciu dát –  GeoIP –  Extract parametrov z url –  Napojenie na analytické aplikačné servery www.seznam.cz
  • 53. Spracovávanie dát •  Regulárne výrazy •  Kategórie •  Rozsahy •  Stromová štruktúra www.seznam.cz
  • 54. Spracovávanie dát •  Regulárne výrazy •  Kategórie •  Rozsahy •  Stromová štruktúra www.seznam.cz
  • 55. Spracovávanie dát – report •  Definícia dimenzií •  Výber z metrik •  Voľba granularit www.seznam.cz
  • 56. Spracovávanie dát – report •  Definícia dimenzií •  Výber z metrik •  Voľba granularit •  Na základe konfigurácie sa vygeneruje HiveQL dotaz! www.seznam.cz
  • 57. Není to tažké SELECT COUNT(DISTINCT gsid), COUNT(1) FROM hit WHERE service = “novinky” AND year = 2013 AND month = 2 AND action = “impress” www.seznam.cz
  • 58. Typické workflow •  Predpočítanie dát – návštevy (MapReduce) •  Samotný výpočet (Hive) •  Tvorba dimenzií z výsledku dotazu •  Agregácia (C++ alebo MapReduce) •  Zmazanie výpočtov z HDFS www.seznam.cz
  • 59. Agregácia •  Data sú agregované až na 4 úrovniach •  Optimalizácia pre zobrazovanie v grafoch •  Počítajú sa kombinácie medzi dimenziami www.seznam.cz
  • 60. Demo
  • 62. Děkuji za pozornost Lukáš Antalov, Vedoucí týmu vývoje www.seznam.cz