HDFS, fajl sistem sposoban da podnese BigData
Šta je HDFS? Odgovor na ovo pitanje je jako jednostavan, HDFS je Hadoop distribuirani fajl sistem i sastavni je deo Hadoop-a. Dizajniran je tako da može da radi na bilo kojoj hardverskoj strukturi. U principu nema nekog smisla da ga instalirate na laptopu ili desktop računaru, jer se prava moć vidi na serverima. Moja prva test instalacija je bila na laptopu, radila je, ali to ima smisla samo ako želite da vidite kako teče instalacija. Čak sam nailazio na ljude koji instaliraju Hadoop na Arduino uređajima. Kada sam instalirao Hadoop na serveru na tri nod-a, to je već bio pravi doživljaj ove strukture. Da se vratim HDFS-u. Ovaj fajl sistem je jako otporan na greške i nije hardverski zahtevan. Pogodan je za skladištenje velike količine podataka. Moram da napomenem da i sam Apache-i daje ovome veliki značaj tako da je HDFS i poseban podprojekat.
Neke odlike. Kako je namenjen za srevere, tačnije za stotine ili čak hiljade servera, koji imaju različite komponente i za koje postoji verovatnoća otkazivanja, glavni cilj HDFS arhitekture je da brzo otkrije greške i da ih automatski otkloni.
HDFS je namenjen za baš velike količine podataka, tipično jedan fajl koji se uveze u njega je reda GB (gigabytes) i više. Imao sam priliku da radim sa fajlom od oko 3GB i bio sam jako iznenađen brzinom upisa u HDFS.
Ima jednostavan model za pristup fajlovima – upiši jednom, čitaj više puta. HDFS nije namenjen za interakciju sa korisnikom, nego je više okrenut nesmetanoj obradi podataka od strane drugih alata. Ako direktno pristupite mašini na koju je instaliran, teško ili gotovo nikako nećete naći fajlove koje ste uneli, a da ih pročitate u ljudima vidljivom formatu. Kako sam pre par nedelja imao nekih problema sa kapacitetom, hteo sam da nadjem particiju i folder gde su tačno smšteni moji fajlovi, ali to se ispostavilo kao jako teško. Na kraju sam uspeo, našao fajlove i proširio kapacitet odgovarajućih particija. Tu sam naučio nešto bitno – da verujem kada kažu da je Hadoop skalabilan i to linearno. U kasnijim tekstovima ću detaljnije pisati o ovoj super odlici Hadoop-a.
NameNode i DataNode
Sve ovo što sam do sad napisao je lepo i radi, ali verovatno se pitate kako. HDFS je dizajniran tako da ima master/slave arhitekturu. Ovde bi to značilo da jedan Hadoop klaster ima jedan i samo jedan NameNode i više DataNode-ova. Obično je jedan server master i na njemu se instalira NameNode, a na ostalima DataNode-ovi. Master server na kome je instaliran NameNode kontroliše pristup fajlovima i upravlja imenskim prostorom (The File System Namespace), koji podržava tradicionalnu hijerarhiju. Korisnik može da kreira direktorijum i u njemu skladišti fajl, može da menja ime direktorijuma, da ga briše i premešta. Isto važi i za fajl. Korisnik upravlja fajlovima na master serveru, vidi direktorijume i fajlove. Dalje se fajlovi dele u blokove i skladište na ostale servere na kojima je instaliran DataNode. DataNode služi za skladištenje blokova, dozvoljava kreiranje blokova, brisanje i ponavljanje (veoma bitna mogućnost).
Sumirano bi to bilo ovako: NameNode čuva meta podatke blokova i tu je da nam pomogne da mi kao krajnji korisnici vidimo fajl, a ne blokove koji nama nisu čitljivi, dok DataNode čuva podatke. Ovo bi se moglo posmatrati kao da se u NameNode-u čuvaju adrese blokova, ime i broj kopija. Sledeća slika ilustruje to.[HDFS]

Napomenuo sam da je ponavljanje blokova veoma bitno. HDFS ima tu mogućnost da se blokovi upisuju više puta. Ovo smanjuje rizik od gubljenja podataka. Podrazumevan broj kopija je tri, što znači da će se svaki blok kopirati tri puta. To ne mora da bude na jednom serveru, već na svim serverima u klasteru na kojima je instaliran DataNode. Tako se smanjuje rizik gubljenja podataka. Jeste da će vam za 1TB podataka biti potrebno 3TB prostora, ali dobijate sigurnost, što je posebno važno ako se radi o bitnim fajlovima. Moguće je podesiti da broj kopiranja bude i veći, pa da se tako dodatno osigurate.

Odavde se izvlači i zaključak da je nerealno i glupo instalirati Hadoop na jednom serveru. To je bila moja druga instalacija koja nije prošla slavno, ali na greškama se uči.
Komunikacija između servera u klasteru se odvija pomoću TCP/IP protokola, pa samim tim i NameNode komunicira sa DataNode-ovima. Pored toga DataNode-ovi periodično šalju takozvani Heartbeat NameNode-u kako bi sve funkcionisalo u najboljem redu.
Na osnovu ovoga vidimo sledeće – OK, siguran sam ako mi otkaže jedan od podređenih servera, pa čak i dva, uvek će mi ostati jedna kopija, brzo ću reagovati i situacija je na kraju okrenuta u moju korist. Šta ako otkaže master server? To je već problem! Ako on otkaže, džaba svi zdravi podređeni serveri i svi blokovi na broju. Ako nemam meta podatke, mogu samo da obrišem sve i sav moj trud je uzaludan. Zato postoji mogućnost kopiranja master servera, odnosno postoji i sekundarni NameNode. Pre par dana sam čitao o nekom novom načinom bekapovanja NameNode-a, iskreno nisam još to dovoljno proučio. Mislim da je to jedina mana HDFS-a, nije nepremostiva, samo treba imati svest o tome da je to kritična tačka i imati kopiju. Velike kompanije imaju bekap čitavih klastera.
Jedno moje zapažanje u toku rada sa Hadoop-om i ostalim Apache alatima je da je potrebno dobro poznavanje korisničkih dozvola sistema na kome instalirate Hadoop. U mom slučaju je to Linux (CentOS). Nisam imao toliko problema sa samim HDFS-om, već sa dobrim dodeljivanjem dozvola. Potrebno je uklopiti mnogo alata sa HDFS-om i svakom dati odgovarajući pristup. HDFS je jako bitna komponenta Hadoop-a i treba joj posvetiti dosta pažnje, jer ipak brza obrada velikih količina podataka ne bi bila laka da nema odgovarajuće podloge na kojoj se sve to skladišti.
Čeka nas još dosta posla, zato se spremite da hadupujemo zajedno!