8. května 2015

Big Data - Velký povyk, kolem velkých dat - první kontakt a bitva technologií v číslech

"Big Data" Tohle slovní spojení poslední dobou v BI světě zaznívá stále častěji. Co si ale pod tímto slovním spojením představit? Co to jsou vlastně ty Big Data? Pravděpodobně hodně dat. Názory co je moc a co je málo, se ale mohou lišit člověk od člověka.
Nedávno při diskuzi na nejmenované sociální síti mi jeden kamarád psal, že četl přirovnání, které mi mluví z duše:
"Big data jsou jako sex náctiletých. Všichni o tom mluví, nikdo ve skutečnosti neví, jak to dělat, ale všichni si myslí, že všichni ostatní to dělají. Takže se raději budou tvářit, že to dělají taky."
Na začátek článku bych chtěl zdůranit, že proti Big Data technologiím vůbec nic nemám a nechci se dotknout těch z Vás, kteří jste při sčítání lidu napsali do kolonky náboženství "Big data". Jen se mi nelíbí, že v marketingové mlze zaniká to nejdůležitější. Silné a slabé stránky dané technologie a hlavně kdy danou technologii použít a kdy raději použít technologii jinou. A právě proto jsem se rozhodnul napsat tento článek.
V bodě 1 představím technologii pro účastníky Big Data nepopsané. Zkušení matadoři mohou přeskočit na bod 2 (test). Pokud čtete knihy raději od konce, můžete skočit i na 3 (závěr) a volitelně si přečíst zbytek.
Základní pojmy
Big Data
Ve své definici jsou BigData svázány s "3 v" z anglického
  • Volume – objem, je toho prostě hodně
  • Velocity – rychle se měnící data
  • Variety – strukturovaná, nestruktorovaná, různé věci na různých hromadách
Hadoop
Když se mluví o Big Data, dříve či později někdo zmíní Hadoop. Hadoop je mimo jiné slon (o tom potom) a také technologie, pro zpracování velkých objemů dat.
Hadoop byl vyvinut vývojářem v Yahoo, pro podporu vyhledávání. Distribovaný výkon více strojů si s problémem poradí lépe jak jedno "Mega železo". Na principu distrubuovaného výkonu konec konců funguje také například lámání hesel, hledání léku na rakovinu a hledání mimozemšťanů. Hadoop byl plyšový slon dítěte autora. Odtud pochází jméno. Technologie je postavená na Linuxu a Javě.
Map Reduce
Je proces zpracování dat, který v principu to funguje tak, že se data namapují do párů klíč hodnota a rozdělí na jednotlivé nody v clusteru. Poté se provede výpočet, který se ve fázi Reduce se zredukují do výsledku. Map reduce úlohy jsou implementovány jako programové skripty v Javě
Pig
Ne každý s potřebou analyzovat data si dokáže napsat program v Javě, který operace provede. Pig je jazyk poskytující umožňující provádět map reduce úlohy a neprogramátorům. V Pig latinu nachystáte skript se sekvencí úloha, z Pig latinu na pozadí vypadne program v javě a tento poté provede map reduce úlohy pro zpracování dat.
Hive
Abstrakce pro nás SQL postižené. Hive je technologie, ve které můžete psát dotazy v jazyku podobném SQL (data musí mít tabulární strukturu). SQL příkaz který napíšete díky Hive opět vygeneruje Javu a tato provede map reduce úlohy k navrácení výsledku.
HDInsight
Je předinstalovaný Hadoop v MS Azure. Technologie, kdy můžete používat Hadoop v cloudu jako službu. Tedy chcete používat Hadoop, nemusíte řešit železo, nemusíte řešit instalaci a konfiguraci. Přijdete k hotovému.
Hortonworks
Mimo jiné partner Microsoftu při tvorbě HDInsight, ale v prvé řadě implementátoři Hadoop. Na jejich webových stránkách je možné stáhnout virtuální stanici s předinstalovaným Hadoopem pro testování a vzdělávání (http://hortonworks.com/hdp/downloads/) . Stejně tak zde najdete tutoriály, které vás s technologií seznámí (http://hortonworks.com/tutorials/).
Projektů a technologií souvisejících s BigData je více, ale o zbytku třeba někdy příště

Experiment a bitva technologíí

Při svém testování jsem se rozhodl otestovat pohled analytika, který má relativně strukturovaná data (textový soubor oddělený oddělovačem) a potřebuje provést analytický výpočet nad velkými daty.
Které technologie porovnat?
SQL Server – máme strukturovaná data uložená v relačních databázích. Věříme, že SQL Server je optimalizovaný pro práci se strukturovanými daty a navíc můžeme používat vychytávky jako columnstore indexy.
SSIS (SQL Server Integration Services) – máme data v nerelačním formátu, ale při zpracování věříme tradičním technologiím
Big Data – vypustíme sloní Hadoop stádo, protože věříme, že více serverů v clusteru provede stejnou práci rychleji.
Jak velká data jsem použil?
Při generování testovacích dat jsem se rozhodnul použít export z databáze ContosoRetailDW (zde: http://www.microsoft.com/en-us/download/details.aspx?id=18279) tabulka FactSalesQuota (cca 8 milionů záznamů a data jsem 50x namnožil)
408 891 300 záznamů, 43,3 GB
Big daty bych to sice nenazval, ale pro testovací účely to bude stačit. Pokud byste měli zájem provést vlastní test, soubor zazipovaný zde http://1drv.ms/1LGyoKF
Data ze souboru jsem také uložil do SQL databáze s clustered column store indexem. Po uložení data zabírají 6,675 GB
Úloha:
Spočítat průměrný prodej, podle scénáře a roku T-SQL Skript níže
T-SQL Select
SELECT
    f.ScenarioKey
    ,f.DateKey /10000 as Year
    ,Sales = Sum(f.SalesAmountQuota)
FROM FSQ f
GROUP BY
    f.ScenarioKey
    ,f.DateKey /10000
ORDER BY Year, ScenarioKey

Jako SQL Server pro SQL dotaz a SSIS jsem použil svůj notebook :-) ( i7, 2 jádra, 16GB paměti, SSD disk), Jako Hadoop jsem použil Azure HDInsight s výchozím nastavením (A3 –4 jádra, 7GB paměti / nód). Jak to dopadlo? Suverénně nejlepší výkon podal při vykonání dotazu SQL Server s columnstore indexem. Zvládnul to za 15 vteřin. Pomohla zde jistě vysoká komprese dat aplikovaná pro jednotlivé sloupce v column store úložišti a z toho plynoucí snížené nároky na IO. Stejná data na heapu (tabuka bez clustered indexu) to zvládla v čase 3:04 za čímž pokulhával HDInsight s 13 nody v clusteru s časem 4:18. Aby si HDInsight s úlohou poradil rychleji jak SSIS, bylo potřeba 5 nodů v clusteru. Detailní přehled v tabulce a grafu.
NástrojČas (s)Čas
SQL Server (column store)
15
00:15
SQL Server (heap)
184
03:04
HDInsight - 13n
258
04:18
HDInsight - 8n
322
05:22
HDInsight -7n
345
05:45
HDInsight -6n
400
06:40
HDInsight -5n
708
11:48
SSIS
736
12:16
HDInsight - 4n
848
14:08
HDInsight - 3n
1257
20:57
HDInsight - 2n
1401
23:21
HDInsight - 1n
1560
26:00


Zajímavé bylo taky srovnání pro menší vzorek dat. Použil jsem 888 MB velký soubor s 8 miliony záznamů (Tabulka FactSalesQuota bez namnožení dat). Nad takto malým vzorkem bylo dokonce od určitého množství více nodů na škodu. 1 pc v clusteru za 109 vteřin, 13 nodů o 10 vteřin pomalejších viz tabulka.
Počet nodůČas (s)
HDInsight - 1 n
109
HDInsight - 8 n
95
HDInsight - 13 n
119

Závěry

Když si i můj notebook poradí s 400 miliony záznamy výrazně rychleji (17 krát) v SQL Serveru při použití column store indexu než cluster o 13 nodech, odnáším si následující závěry
Moje data nebyly dost "Big", aby se promítla síla stáda slonů
Pro tento typ úlohy jsou lepší technologie, než Hadoop. Možná byla úloha příliš jednoduchá a výpočetně nenáročná.
Strukturovaným datům je lépe v SQL databázi, Hadoop bude vhodnější použít spíše na data nestrukturovaná. Koneckonců po aplikaci column store indexu mají stejná data 6,7 GB v SQL databázi oproti 43 GB textovému souboru. A to jsem ty data kvůli zpracování ještě musel přenášet do datacentra (což ne vždy jde)
Hive má docela velkou počáteční režii. Pro menší objemy dat, než se z HiveQL příkazů vygeneruje jar a proběhne map reduce, jiná technologie už dávno vrátila výsledek.
Pár slov závěrem:
HDInsight a Hadoop vyšli v mém testu coby poražení na celé čáře, ale... Vědět na co technologie vhodná není, je stejně tak důležité jako, na co vhodná je. Pokud jsem nějakým způsobem znevážil Vaše "Big Data nábožentví", není nic jednoduššího než udělat testy vlastní a podělit se o výsledky. Klidně napište, budu rád. Do té doby budu strukturovaná data dále zpracovávat tradičními technologiemi. Pokud je objem dat velký dá se uvažovat o nástrojích jako je Parallel Data Warehouse (využívá distribuovaného výkonu, ale je navržen pro práci se strukturovanými daty). Využití pro Hadoop, potažmo HDInsight si budu hledat v oblastech dat nestrukturovaných. Pro strukturovaná data ale výhledově provedu další testy. HDInsight je super nástroj na testování Hadoopu, párkrát kliknete a máte cluster, není problém přidat/ubrat nody za pár minut, stejně jako celý cluster zrušit. Přestože HDInsight v mém testu zůstal poražený, budu si pro sebe (a své klienty) dále hledat vhodné využití této technologie.

Na dotaz čtenáře jsem udělal ještě srovnání s Analysis services. Multidimenzionální model bez optimalizace za 1 vteřinu, Tabular za 2.

Žádné komentáře:

Okomentovat