Lukáš Antalov, Vedoucí týmu vývoje Jak postavit nástroj pro datovou analýzu www.seznam.cz Outline •  Čo to je webová analytika? •  Webová analytika @ Seznam.cz –  Zber dát –  Spracovávanie –  Agregácia •  Hadoop –  HDFS –  MapReduce –  Hive –  HBase K čomu slúži webová analytika? www.seznam.cz www.seznam.cz Začiatky boli jednoduché www.seznam.cz Analýza logov webserveru www.seznam.cz Google Analytics www.seznam.cz S akými údajmi pracujeme? •  Zdroj návštevy –  Médium •  Charakteristika návštevníka –  Prehliadač –  Operačný systém –  Hardware –  Lokalita •  Priechod webom –  odchody www.seznam.cz Webová analytika •  Slúži k pochopeniu chovania návštevníkov na stránkach •  Je základom stratégie pre internetový marketing Seznam Analytika 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á 16 strojov –  V špičke až 16000 req/sec –  Denne 500 GB dát 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 •  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 Príklad 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 medzivýpočtov 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 Apache Hadoop www.seznam.cz Apache Hadoop •  Open source software pre spoľahlivé, škálovateľné a distribuované výpočty •  Umožňuje spracovávať veľké objem dát pomocou clustru serverov •  Obsahuje: –  Hadoop Common –  Hadoop Distributed File System (HDFS™) –  Hadoop YARN –  Hadoop MapReduce www.seznam.cz Apache Hadoop •  Škálovatelnosť –  Škálovanie pridávaním ďaľších strojov –  Lokálne spracovávanie – nezahlcuje sieť dátami www.seznam.cz Apache Hadoop •  Škálovatelnosť –  Škálovanie pridávaním ďaľších strojov –  Lokálne spracovávanie – nezahlcuje sieť dátami •  Flexibilita –  Akékoľvek typy dát (blobs, dokumenty, záznamy, ….) –  V ľubovolnej forme (štrukturované, neštrukturované) www.seznam.cz Apache Hadoop •  Škálovatelnosť –  Škálovanie pridávaním ďaľších strojov –  Lokálne spracovávanie – nezahlcuje sieť dátami •  Flexibilita –  Akékoľvek typy dát (blobs, dokumenty, záznamy, ….) –  V ľubovolnej forme (štrukturované, neštrukturované) •  Účinnosť –  Zjednotený storage, metadata, bezpečnosť –  Spoľahlivý a výkonný distribuovaný súborový systém –  MapReduce – programovací framework 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” w1 w2 w3 r1 r2 r3 “Result” “worker” “worker” “worker” Partition 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 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 www.seznam.cz MapReduce – Classes •  Časti frameworku sú implementované ako abstraktné triedy alebo rozhrania www.seznam.cz MapReduce – non java použitie •  Hadoop streaming –  Libovolný jazyk –  std:in –  std:out •  Hadoop Pipes –  C++ interface 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 – 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 Hadoop Ecosystem •  Hive –  DWH systém –  SQL-like jazyk zvaný HiveQL •  HBase –  Stĺpcovo orientovaná databáza •  ZooKeeper –  Centralizovaná služba na udržiavanie informacií www.seznam.cz Hadoop Ecosystem •  Hive –  DWH systém –  SQL-like jazyk zvaný HiveQL •  HBase –  Stĺpcovo orientovaná databáza •  ZooKeeper –  Centralizovaná služba na udržiavanie informacií •  Je toho viac: –  Cascading, Scribe, Cassandra, Hypertable, Voldemort –  Storm, Pig, Howl, Oozie, Chukwa, Mahout –  Sqoop, Flume, Avro –  … www.seznam.cz Hadoop Ecosystem Hive 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 –  MAP –  STRUCT 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/'; HBase www.seznam.cz HBase •  Open-source nerelačná distribuovaná stĺpcovo orientovaná databáza •  Operuje nad Hadoop clustrom •  Ukladá data na HDFS •  Odolná voči výpadkom •  Horizontálne škálovatelná •  ACID garancia na úrovni riadkov •  Automatické shardovanie tabuliek www.seznam.cz Veľká zoradená mapa www.seznam.cz HBase – architektúra www.seznam.cz HBase – Master •  Priraďuje regióny RegionServerom •  Drží adresu RS obsluhujícího tabulku ROOT •  Stráží RS a případě výpadku: –  provede split logu daného RS –  přiřadí off-line regiony živým RS www.seznam.cz HBase – RegionServer •  spracovává R/W požiadavky klienta •  zápisy sa logujú do Write Ahead Logu (WAL) www.seznam.cz HBase – Compaction •  Zlúčenie množstvo HFiles do jedného •  Major compaction www.seznam.cz HBase API •  get(row) •  put(row, map) •  scan(key range, filter) •  increment(row, columns) •  delete(…) www.seznam.cz HBase – MapReduce •  Zdroj aj úložisko MR jobov •  Mapy majú data lokálne www.seznam.cz Štatistiky Sklik.cz 60  GB     50  GB     40  GB     30  GB     20  GB     10  GB   www.seznam.cz Štatistiky Sklik.cz 60  GB     50  GB     40  GB     30  GB     20  GB     10  GB   www.seznam.cz HBase – Bloom filters •  Space-efficient probabilistic data structure •  Testuje prítomnosť prvku v množine •  Môže byť false positive, ale nie false negative www.seznam.cz HBase – Bloom filters •  Space-efficient probabilistic data structure •  Testuje prítomnosť prvku v množine •  Môže byť false positive, ale nie false negative •  Index – zrýchľuje čítanie •  Access patterns – pomáha v prístupe k dátam ak preskakujeme veľa záznamov pri scanoch www.seznam.cz HBase – Coprocessor & Filters •  Region-side funkcionalita pri práci nad dátami •  Custom filtrovanie záznamov •  Coprocessor - Observer –  Hooky pri práci s dátami a regiónmi –  pre/post métody pre rôzne operácie •  Coprocessor – Endpoint –  Nahradzujú stored procedúry v RDBMS www.seznam.cz Lukáš Antalov, Vedoucí týmu vývoje Děkuji za pozornost