Big Data jsou dle různých analytických společností jednou z věcí, která by se měla v IT v nejbližších pár letech dramaticky prosadit. Jak je v těchto situacích obvyklé, je v tom na jednu stranu cítit jistá bublina či hype, na druhou stranu o tom, že se v nějaké podobě uchytí a budou používat asi pochybuje málokdo.

Základní myšlenka je poměrně jednoduchá. Pokud mi nějaký systém generuje velké množství dat, která je pro mne příliš drahé anebo technologicky nezvládnutelné zpracovávat “klasickým” způsobem (tj. vytvořit datový sklad pomocí relační databáze a data do něj importovat), ale zároveň je mi líto data vyhodit, jsem zralý pro Big Data. Jejich hlavní myšlenka spočívá v tom, že místo jednoho supervelkého a superdrahého serveru mám distribuované řešení s řadou levných serverů, kam data uložím a můžu do nich později klást dotazy a provádět nad nimi různé analýzy. Za nízkou cenu a nenáročnost zaplatím sníženým komfortem a rychlostí ve srovnání s “pořádným databázovým řešením”.

Když se Big Data objevila jako další ze služeb Windows Azure pod názvem HDInsight, neváhal jsem a rozhodl jsem se vyzkoušet, jak se s velkými daty pracuje. Zvídaví mezi vámi proto doufám uvítají moje postřehy a návody.

Služba Azure HDInisght by se dala jednoduše definovat jako standardní implementace prostředí Apache Hadoop pro operační systém Windows Server, který běží v cloudovém prostředí Windows Azure. Tak jak je standardně popsáno, Hadoop Cluster se skládá z hlavního počítače neboli masteru či Head Node, který řídí celý cluster a hostuje komponenty JobTracker, TaskTracker, NameNode a DataNode. K němu mohou být další počítače jako tzv. slave s komponentami DataNode a TaskTracker.

Uložení dat

První základní komponentou Hadoop implementace je uložení dat. Podle původního záměru se k uložení zpracovávaných dat používal souborový systém HDFS (Hadoop Distributed File System), který umožňuje uložit velké množství dat v režimu “zapiš jednou, čti mnohokrát”. Tento souborový systém má i určité nevýhody, např. nemožnost přístupu k datům “zvenku”, tj. odjinud než z vlastního Hadoop clusteru. Proto se časem vynořila řada alternativ, jak zpracovávat data uložená jinde a zpřístupnit je pro konzumaci v Hadoopu.

Touto cestou se vydala i implementace ve Windows Azure, která pro uložení využívá Azure Storage typu Blob (i když HDFS je též plně k dispozici). To je výhodné například proto, že do tohoto úložiště můžete snadno ukládat data z mnoha platforem – .NET, Java, PHP, Python, node.js, iOS, Android apod. Není tedy nutné implementovat HDFS, stačí použít objektovou knihovnu pro Azure Storage na příslušné platformě a pohodlně uploadovat data pro pozdější zpracování.

Tento přístup je výhodný i z finančního hlediska, jak si vysvětlíme níže. Každopádně první krok, který musíme udělat je založení Azure Storage účtu, což je naštěstí velmi snadné:

image

 

Funkci souborového systému si můžete vyzkoušet použitím následujího příkazu v Hadoop příkazové řádce:

hadoop fs –ls /

Tento příkaz vypíše obsah Azure Storage používané clusterem (ASV znamená Azure Storage Vault). Pro podrobnější diskusi pro tuto možnost uložení dat doporučuji tento pěkný článek, popis možností a adresace tohoto úložiště je zde.

Výpočetní výkon

Druhou základní komponentou je distribuovaný výpočetní cluster. V Azure variantě se může skládat z 1 až 40 uzlů (pokud použijete režim Quick Create, nabízí se velikosti 4, 8, 16 a 32). Head node je velikosti XL (8 jader, 14 GB RAM), ostatní nody (compute node) jsou velikosti L (4 jádra, 7 GB RAM). Celá služba je v tuto chvíli ve fázi Preview a výše zmíněné velikosti virtuálu nelze modifikovat.

Založení clusteru je velmi jednoduché a je dobře popsané v tomto přehledovém textu. Spočívá ve vyplnění jedné stránky údajů:

image

Po cca 15 minutách je cluster připravený k použití. Můžeme se k němu buď připojit přes Remote Desktop a pustit Hadoop příkazovou řádku nebo cokoliv jiného:

image

Anebo můžeme použít možnost Manage a zobrazí se nám domovská stránka našeho Hadoop clusteru:

image

Jeho funkci si můžeme vyzkoušet například použitím interaktivní JavaScript konzole:

image

Například pro výpis obsahu našeho úložiště stačí zadat příkaz:

#ls /

Možnost vyzkoušení a cena

Pokud nemáte využitelný Azure účet (např. v rámci svojí MSDN subskripce), je možné použít 90denní bezplatný zkušební účet zdarma (založení je možné zde, podrobný postup registrace popsaný zde). Služba HDInsight je ve fázi Preview, tudíž o její používání je nutné zažádat zde a počkat na schválení přístupu.

V rámci testovacího účtu máte k dispozici 70 GB prostor na Azure Storage, což by mělo být pro účely zkoušení více než dostatečné. I komerční využívání je výhodné. Například za uložení 100 GB dat v bezpečném úložišti s trojí replikací všech dat zaplatíte pouhých 7 dolarů za měsíc.

Je ovšem třeba být opatrný pokud jde o výpočetní hodiny, kterých je v rámci zkušebních účtů k dispozici 750 pro virtuál velikosti Small. Ale pozor, například nejmenší cluster vytvořený rychlým průvodcem obsahuje jeden virtuál velikosti XL (s osminásobnou spotřebou času) a tři virtuály velikosti L (se čtyřnásobnou spotřebou času). Při produkčním běhu by tedy takový cluster spotřeboval celkem 20 hodin instance Small za jednu hodinu “kosmického” času, tudíž byste takový cluster v rámci bezplatného limitu mohli provozovat pouze 37 hodin měsíčně. Pak by vám byl do konce měsíce zrušen. Během režimu Preview je ale účtovaná spotřeba poloviční, tudíž ve skutečnosti ho můžete v rámci bezplatného limitu běžet 75 hodin. Při komerčním účtování se pak cena za typický cluster pohybuje ve stovkách dolarů měsíčně.

Zde se rovněž ukazuje výhodnost zvoleného modelu souborového systému pro cloudový provoz. Pokud byste používali souborový systém HDFS “uvnitř” virtuálních počítačů, byla by naúčtovaná částka poměrně vysoká, neboť cluster musí běžet nepřetržitě celý měsíc a výpočetní kapacita, kterou si rezervuje, ale přitom využívá pouze nárazově, je zbytečně drahá. Zrušením clusteru byste navíc přišli o uložená data. Využití HDFS je tedy výhodné spíše pro rychlé zpracování dat, která pak není třeba trvale držet.

Naproti tomu zvolené použití Azure Storage pro souborový systém znamená, že platíte trvale pouze za uložená data, což jsou poměrně malé částky. Cluster pro výpočetní výkon pak vytvoříte pouze tehdy, když chcete provádět analýzy a výpočty – neplatíte za něj tedy v režimu 24x7. Navíc můžete volit různé velikosti clusteru podle aktuální situace. Ukládání dat ke zpracování, případně čtení výsledků zpracování je možné přímo do/z úložiště bez nutnosti spouštět cluster.

Závěrem 

Dnes jsme si probrali pouze teoretické základy a architekturu řešení. V zítřejším druhém díle se podíváme na výpočty s použitím MapReduce a ve třetím díle na manipulaci s daty pomocí technologií Hive a Pig.

Michael