HDFS i MapReduce

Objavljeno : January 30, 2015

Nekoliko reči o HDFS – u i MapReduce -u!
hdfsarchitecture_
HDFS arhitektura

HDFS i MapReduce svakako zaslužuju po poseban post, što će i dobiti, ali vredi i sada bar ukratko objasniti kako Hadoop funkcioniše. HDFS kao što mu i ime govori je distribuirani fajl sistem koji maksimalno pojednostavljuje skalabilnost. Za HDFS se često i kaže da je infinitely scalable. Takođe prednost je i što nije potrebna skupa hardverska infrastruktura već su u pitanju veoma jeftini obični kućni računari. Jednostavno, koliko novih računara dodate klasteru toliko se povećava kapacitet i gotovo isto toliko se povećavaju performanse tj. vreme potrebno da se neki upit izvrši.

HDFS čine NameNode i DataNode – ovi koji funkcionišu po master slave principu. NameNode je centralni deo HDFS – a koji sadrži meta podatke o klasteru, tj. podatke o tome gde se koji fajl ili još preciznije data blok nalazi, s obzirom da jedan fajl može biti raspoređen na više data blokova od po 128Mb (moguće je promeniti veličinu data blokova) ukoliko je fajl veći od 128Mb. Takođe NameNode sadrži podatke o topologiji klastera i stanju svakog DataNode – a. S druge strane DataNode sadrži realne podatke za analizu. Ovakava arhitektura odmah budi sumnju, s obzirom da je NameNode single point of failure. U koliko se nešto ne planirano dogodi sa NameNode – om nemamo način da povratimo podatke jer ne znamo kom fajlu koji data blok pripada. Kako bi se izbegao ovakav scenario uvodi se Secondary NameNode koji se nalazi na drugoj mašini. Secondary NameNode ne pruža potpunu redudantnost podataka već beleži promene na fajl sistemu u image fajlu i ukoliko NameNode otkaže potrebno je neko vreme pre nego što klaster ponovo postane dostupan i to je svakako jedna od mana Hadoop – a. Fajl koji se čuva u HDFS – u, ukoliko je veći od 128Mb se razbija na blokove od po 128Mb i svaki blok se čuva na tri različite mašine u klasteru. Na ovaj način se obezbeđuje dostupnost podataka ukoliko jedna mašina otkaže. Odluku o tome gde će koji blok biti sačuvan i podatke o svakom bloku sadrži naravno NameNode. Drugi problem koji se može javiti sa NameNode – om je situacija kada imamo ogromnu količinu meta podataka koja može prevazići kapacitet NameNode – a ili znatno uticati na performanse NameNode – a.

Još bih samo želeo da pomenem da su operacije sa HDFS – om gotovo identične operacijama na Linux operativnom sistemu, s tim što počinju sa hadoop fs, pa na primer ukoliko želite da izlistate sadržaj nekog foldera dovoljno je zadati komandu hadoop fs -ls /imeFoldera.

MapReduce je API ili možemo reći i računarski model koji je vrlo pogodan za procesuiranje podataka skladištenih u HDFS – u. Implementiran je u Javi, ali je moguće pisati MapReduce programe u gotovo bilo kom jeziku koristeći Streaming API. Funkcioniše tako što ulazne podatke posmatra kao key – value par, a i rezultat map – reduce operacije je key – value par, gde se velika fleksibilnost ostavlja programeru u definisanju key – value para. Takođe postoje i dve opcione faze u MapReduce programu koje možete, a i ne morate implementirati i to su Sort i Shuffle. Ove dve faze služe kao priprema podataka nakon Map faze za Reduce fazu. Output Map faze su key – value parovi, i to su ulazni podaci za Sort i Shuffle, čiji output su takođe key – value parovi koji su input Reduce faze čiji output su jedan ili više key – value parova. Slika ispod grafički prikazuje kako MapReduce funkcioniše na primeru WordCount programa, što je za MapReduce isto što i “Hello World!” kada učite neki programski jezik. Program ima za cilj da u tekstualnom fajlu prebroji koliko puta se neka reč pojavljuje.
mapreducewordcountoverview1
MapReduce WordCount primer
Šta Hadoop nije?
Hadoop nije zamena za relacione baze podataka! Da bismo pričali o tome šta Hadoop nije možda bi bilo dobro da uvedemo CAP (Consistency, Availability, Partitioning) teoremu. 1998. Brewer objavljuje CAP teoremu po kojoj bilo koji sistem za skladištenje i pristupanje podacima može imati maksimum 2 od 3 (CAP). S obzirom da sam pomenuo da je Hadoop pogodan za batch procesuiranje, a konzistentan svakako nije, znači da nam od CAP ostaje samo P. I kao što je pomenuto zaista jeste odlično rešenje za partitioning ili skalabilnost. U koliko vam je konzistentnost podataka bitna relacione baze podataka su još uvek najbolje rešenje i za njih često kažemo da nude CA (Consistency i Availability). Prilikom transfera novca sa računa na račun ne sme doći do greške inače banke ili mnogo verovatnije pojedinci bi gubili novac. Dakle kad su transakcioni podaci u pitanju i kada nam je konzistentnost bitna ne možemo se osloniti na Hadoop. Sa druge strane neke NoSQL baze podataka nude ili CP ili CA, a Cassandra nudi mogućnost da sami izaberemo dva svojstva koja su nam bitna. O Cassandra – i i drugim NoSQL bazama će takođe biti dosta reči u blogu.

U narednim postovima možete očekivati detaljnije objašnjenje HDFS – a i MapReduce, pa ako vas je ovaj post zainteresovao očekujte nastavak uskoro.

Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Popunite obavezna polja *