Članci

Hadoop kao arhiva

Posle niza tekstova koji su se više odnosili na alate koji se dodaju na Hadoop, rešio sam da se vratim na trenutak na jednu od najbitnijih Hadoop komponenti – HDFS. U celoj Hadoop “priči” potrebno je podjednako znati i Hadoop osnovne alate i alate iz ekosistema, ali razlog zbog koga se u ovom tekstu fokusiram na HDFS jeste nova verzija Hadoop-a (2.6.0). Iako svaka verzija donosi brojna unapređenja, ova mi je posebno zapala za oko. Pokušaću da objasnim i zašto.

Šta je to što je doneo Hadoop 2.6.0?

Cilj ovog teksta nije da nabrojim sve nove dodatke i poboljšanja Hadoop-a, već želim da se fokusiram na jedan – HDFS Archival Storage. Napomenuo bih na samom početku da je sada moguće koristiti radnu memoriju i iskoristiti pun potencijal SSD diskova.  Dakle, sada je moguće praviti kombinacije u klasteru i igrati se sa performansama. Da se vratim na skladište kao arhivu. Ovo je posebno interesantno u pogledu cene čuvanja informacija, a takođe pruža šansu Hadoop-u tamo gde još nema Big Data podataka, ali postoji potencijal.

Kako iskoristiti Archival Storage?

Cena skladištenja podataka pada svakog dana, tako da sa novom polisom skladištenja Hadoop postaje jedan od najjeftinijih načina da se čuvaju podaci (Cloud je najjeftiniji). Zamislite da kupite računare koji imaju slabe procesore, malo radne memorije, ali dosta prostora na hard disku. Na sve to instalirate samo Hadoop, bez alata iz ekosistema, i podesite HDFS kao Archive. To znači da će Hadoop da koristi nodove velike gustine, odnosno skladištiće više podataka nego inače u jedninici memorije. Na ovaj način se gubi na performansama u smislu obrade podataka, ali ako nam je potrebna jeftina arhiva, onda to i ne predstavlja problem. Ali šta ako treba da se brzo izvuku neki podaci iz arhive? Postoji rešenje i za to, a ono je kombinacija izbora načina skladištenja.

Screen Shot 2014-12-19 at 10.12.55 PMWarm, Cold i Hot.

Warm način skladištenja znači sledeće: ako imate tri DataNode-a, jedan će biti tradicionalno DISK skladište, koje je do sada bilo korišćeno u Hadoop-u, a druga dva Node-a će biti postavljena na ARCHIVE. Odnosno DISK: 1 ARCHIVE: n-1. Ovo može da bude jako interesantna arhitektura ako želite da imate skladište i da iz njega brzo izvučete neku informaciju. Ovo bi bila malo skuplja konfiguracija jer jedna mašina mora da bude opremljena sa boljim procesorom i dovoljnom količinom radne memorije i baš ona bi koristila DISK skladište. Prednost ovakve arhitekture je i to da je moguće neke podatke skladištiti samo na arhivu, a neke na disk. Još jedna prednost korišćenja ARCHIVE skladišta jeste da je manja verovatnoća da će ovakav DataNode da otkaže.

Cold način skladištenja znači da su svi DataNode-ovi podešeni na ARCHIVE. Ovo znači da su podaci manje dostupni, ali ako vam treba samo skladište onda je ovo odlično rešenje. U svakom slučaju, moguće je prebaciti podatke sa Cold skladišta na Warm ili Hot i obratno. Ovo rešenje mi je možda najinteresantnije za korišćenje u firmama u našoj zemlji koje nemaju Big Data podatke ili nisu shvatile da eksterni podaci mogu da imaju Business value za njih, ali o tome u drugom tekstu. U svakom slučaju, da imam firmu koja još nema Big Data, kupio bih par mašina sa dosta HDD prostora i skladištio sve podatke iz firme i one eksterne, sa društvenih mreža, web sajtova… Nakon par godina sam siguran da bi mogao da se uoči neki šablon i da se donesu zaključci koji bi pomogli daljem poslovanju firme.

Hot način skladištenja znači da su sva podešavanja DISK. Ovo je danas najkorišćeniji način skladištenja.Screen Shot 2015-01-11 at 6.51.00 PM

Još tri načina skladištenja koja nisu vezana za arhiviranje, ali smatram da je bitno pomenuti ih su:

All_SSD, sve replike su na SSD disku.

One_SSD, jedna replika je na SSD disku, ostale na disku.

Lazy_Persist, jedna replika je upisana u radnu memoriju, pa se zatim upisuje na disk.

Sa svakom novom verzijom Hadoop je sve napredniji i dobija na kompleksnosti. Kako raste Hadoop, tako rastu i alati iz njegovog ekosistema. U svetu sve više firmi koristi Hadoop i ako malo pogledate na Internetu, 2015. godina će biti jako uspešna za ovaj alat. Kao što sam rekao, i alati iz ekosistema napreduju. Možda je najinteresantnije unapređenje doneo Apache Hive, koji sad podržava ACID transakcije. Sve češće je Hadoop deo kombinacije IBM, Microsoft, HP rešenja i ovo su samo neki od velikih igrača koji sve više koriste Hadoop.

Nastavljamo da pišemo o Hadoop-u, Big Data, alatima iz ekosistema, o uticaju Big Data na organizaciju. Javite se ako imate pitanja ili želite da pomognete da širimo znanje o Hadoop-u. Kao što znate, ovaj blog je bogatiji za još jednog autora i svako ko želi može da se javi i da pomogne.  hadoop-srbija je u prošloj godini imao oko 6000 pregleda iz Srbije, Hrvatske, Bosne… Kako je blog specijalizovan za usku oblast IT-a, smatram da je postignut uspeh u prošloj godini. Takođe, pre mesec dana sa kolegom Stepanićem sam pokrenu i blog na temu Internet of Things. Hvala vam što ste uz nas, potrudićemo se da ispunimo vaša očekivanja i u ovoj godini, pa da zajedno hadupujemo!

Unos podataka u Hadoop klaster

Pre početka instalacije Hadoop-a isplaniraćete ceo sistem ili možda imate neki test Hadoop sistem. U svakom slučaju, prvo morate da se zapitate koje podatke treba obraditi vaš sistem. Kako je Hadoop jako fleksibilan što se tiče raznolikosti podataka, sledeće na šta treba da obratite pažnju je kako te podatke da prebacite u HDFS.

Brzina podataka

Kao prvo, treba da utvrdite kojom brzinom pristižu podaci u vaš sistem. Neka generalna podela podataka u tom smislu bi bila na one statične i nestatične podatke. Statični podaci su oni koji se ne povećavaju nakon unosa. Pravi primer za ovakve podatke su genetski podaci. Malo da pojasnim ovo: naravno da vi možete da dodate nove podatke u sistem, nego kada unesete neke podatke, analize se vrše samo nad njima. Dobijete 1TB genetskih podataka i sve analize vršite nad njima. Za statične podatke je lakše odabrati alat za transfer u Hadoop klaster iz prostog razloga što transfer nije čest. Nasuprot statičnim, nestatični podaci se stalno uvećavaju. Dobar primer su socijalne mreže ili log podaci – ako ste imali 2TB log podataka, za kratko vreme imate još toliko. U ovakvim situacijama morate pažljivo da birate alate kako biste proces automatizovali i olakšali. Naravno, i vaše analize nisu iste ako imate podatke od pre mesec dana ili sve podatke do dana kada ih analizirate. U početku svog rada sa Hadoop-om nisam previše obraćao pažnju na ovo, ali kada sam dobio pristup i nekim podacima koji stalno rastu, onda sam uvideo da treba da poboljšavam načine transfera podataka u HDFS i da je jedan od prvih koraka plan na osnovu brzine podataka.

Količina podataka

Još jedna stvar koju treba uzeti u obzir jeste količina podataka. Bitno je da osim inicijalnog unosa podatak u HDFS pokušate da predvidite koliki će priliv biti ubuduće i na koje vreme. Ovo je bitno ako npr. imate podatke koje unesete u HDFS danas, pa tek za mesec dana, razmislićete da li želite da trošite vreme na pisanje složenih skripti koje sve to automatizuju. Ako sa druge strane imate priliv podataka svakog dana još kako je pametnije uložiti vreme da sve automatizujete. Količina je bitna iz razloga planiranja kanala prenosa. Naime, neki alati daju mogućnost odabira propusnog opsega. Ako vam pristižu male količine podataka, onda definišite parametre prema tome kako ne biste opteretili sistem. Verujte mi, ovo je jako bitno! Imao sam iskustva sa ovim i zna da zada glavobolju ako sve lepo ne izdefinišete.

Alati

Postoji nekoliko načina za prenos podataka u Hadoop klaster, odnosno u HDFS. Ako testirate nešto na početnom nivou, možete koristiti HUE i njegov interfejs, ali naravno to nije opcija, pogotovo ako imate jako nestatične podatke. Ostali načini su:

  • WEB HDFS
  • HDFS NFS Gateway
  • Apache Flume
  • Apache Sqoop
  • Korišćenje HDFS komandi

Naravno, ovo su samo neki načini koje sam ja testirao. Postoji još nekoliko alata, ali kako ih nisam testirao ne želim sa sigurnošću da tvrdim koji su i kako rade.

Što se tiče Flume-a i Sqoop-a slede tekstovi sa primerima, tako da će ovaj tekst biti siromašniji za ova dva alata. Pokušaću da opišem ostale ukratko.

WEB HDFS – ovo je klasičan REST API za HDFS, npr. HUE koristi ovaj API za unos podataka u HDFS. Nije preterano teško koristiti ovaj način, još ako ste upoznati sa REST-om, mislim da ćete preferirati ovaj način. Primetio sam da se u realnim modelima dosta potencira. Moje mišljenje je da je ovaj način jako fleksibilan i možete prilično da prilagodite sebi sistem unosa podataka u Hadoop klaster. Ne želim da pišem ovde kako izgleda koristiti WEB HDFS, jer je zvanična dokumentacija jako dobra i preporučujem je.

HDFS NFS Gateway

Jedna jako zanimljiva mogućnost HDFS-a, NFS Gateway vam omogućava da pristupite HDFS-u sa vašeg lokalnog fajl sistma. Zamislite da vam je Hadoop klaster jedna fleš memorija i da je utaknete u vaš računar. Ako omogućite ovo na Hadoop klasteru, dobijate mogućnost da prenosite podatke iz HDFS-a i u HDFS, možete da strem-ujete podatke direktno na HDFS. Ako se sve pravilno podesili na klasteru, dovoljno je da uradite sledeće ne lokalnoj mašini:

       mount -t nfs -o vers=3,proto=tcp,nolock $server:/ $mount_point

Ovo može da bude prilično zgodno ako imate neke podatke na odvojenom serveru i želite da ih brzo prebacite u HDFS.

HDFS ima svoje ugrađene komande koje su unix like, odnosno ako ste upoznati sa Linux-om, jako lako ćete da ih savladate. Iskreno, ja nisam prviše koristio ove komande iz prostog razloga, Hadoop je instaliran na tri odovojene mašine, a podaci su vam na četvrtoj i nisam hteo tradicionalno da ih prebacim na jednu od mašina, pa zatim da koristim ove komande. Ovo može da bude odlično rešenje za one koji pored Hadoop-a te iste mašine koriste i za prikupljanje podatka. Dovoljno je da uradite sledeće :

hdfs dfs -put localfile /user/hadoop/hadoopfile.

Ova komanda služi da neki fajl prebacite u HDFS, a da se nalazi na istoj mašini.

Ovo su neke mogućnosti transfera podataka u HDFS, koje podržavaju bilo koji tip podataka i naravno ako ste vešti možete odlično da ih iskoristite. Posebno interesantni alati su Flume i Sqoop, koji su baš namenjeni specifičnim podacima koji se verovatno i najčešće obrađuju uz pomoć Hadoop-a. Dosta pažnje treba posvetiti tome kako da unesete podatke u Hadoop klaster, jer ako nemate podatke nemate ni na čemu da radite. Spremite se za Flume i Sqoop i kodove koje sam ja pisao. Naravno, nastavljamo da hadupujemo zajedno!

Hadoop Ecosystem

U prethodnim tekstovima sam pisao o Hadoop-u i njegovim glavnim komponentama, Hadoop Common, HDFS, MapReduce i YARN, to je u suštini srž Hadoop framework-a. Svaka od ovih komponenti je moćna sama po sebi i zajedno čine jednu savršenu platformu koja ima mogućnost da se proširi dodatnim alatima po potrebi.

Šta je Hadoop ecosystem?

Hadoop ecosystem je skup alata, ondnosno projekata, koji mogu da rade na Hadoop platformi. Moram da napomenem da u te alate spadaju i HDFS i MapReduce, koji su i delovi platforme, ali se vode i kao Apache projekti. Ako Hadoop gledamo kao jednu celinu, na njega je moguće dodati još dosta raznih alata, velikom većinom razvijenih od strane Apache fondacije. Ti alati su sposobni da komuniciraju sa Hadoop komponentama i njihov rad može da bude nezavistan, a neki od njih su pravljeni samo za Hadoop. Koliko sam upoznat, većina alata se ne koristi samostalno već sa Hadoop-om. Danas na tržištu postoje kompanije koje nude Hadoop platformu sa već izgrađenim ekosistemom, što mnogo olakšava proces instalacije, ali i izbora. Ako biste sami birali projekte na Hadoop-u, velika je verovatnoća da zaboravite neki. Postoji desetak takvih kompanija među kojima se najviše ističu Hortonworks, Cloudera i MapR Technologies, a moram da napomenem da se i veliki igrači bave ovim, poput IBM-a, Intela, AWS-a…. Prve tri koje sam naveo kao primarnu delatnost imaju Hadoop, dok su vam ostala imena poznata po nekim drugim tehnologijama.

HDP

HDP

Ja lično radim sa Hortonworks data platformom (HDP) iz više razloga. Po mom mišljenju jako je dobar. Na sajtu Hortonworks-a postoji odlična dokumentacija, izbor alata potpuno odgovara mojim potrebama i možda ono što me je najviše opredelilo za njih jeste cena. HDP je open source, ne morate da date ni dinara, a imaćete sve što vam je potrebno, bilo da imate klaster od par mašina ili pak više klastera od mnogo mnogo mašina.

Zašto je neophodan?

Nameće se pitanje “ Zašto je meni potreban ekositem, zar mi nije dovoljan samo Hadoop?”. Odgovor na ovo pitanje zavisi isključivo od vaših potreba. E sad, pošto i lično ne volim da dobijem odgovor “ZAVISI…”, pokušaću da navedem neke primere iz iskustva za Hadoop ekosistem i Hadoop-om sa osnovnim komponentama. Ako želite da samo skladištite podatke i da to bude brzo, onda vam je dovoljan samo Hadoop. Naravno, možete instalirati i samo HDFS, tako da uštedite na vremenu podešavanja klastera. Ovo je jako dobro pogotovo ako vam padne na pamet da jednog dana analizirate te podatke. Možete bez problema naknadno da instalirate MapReduce i da dobijete samo Hadoop kao celinu. Ako želite da analizirate neke podatke, bili oni struktuirani ili ne, za to vam služi MapReduce i možete da sednete i počnete da pišete Java kodove za vaše potrebe. Ukoliko baš obožavate Javu i znate savršeno da porgramirate MapReduce kodove, onda je ok, vama je potreban sam Hadoop i njegove osnovne komponente. Sad zamislite da imate dodatne alate koji skraćuju vreme pisanja koda u Javi i intuitivniji su za neki zadati problem. E, tu nastupa na delo moć Hadoop platforme i projekata koji se grade na njoj. U HDFS možete da upišete i struktuirane podatke. Mnogo je lakše pisati upite u jezicima predviđenim za to, nego u Javi. Lično sam probao i uverio se da nešto što u Javi bude u 40 linija koda može u Pigu da se napiše u svega desetak. Današnji tempo života je ubrzan, zar nije bolje imati dodatne alate kojima se ubrzava analiza podataka? To može da bude presudno za nekog vašeg klijenta.

Da podvučem ovde crtu, moj savet je, ako želite samo da skladištite podatke i možda eventualno kasnije da ih analizirate, dovoljan vam je samo HDFS, nemate potrebu za više alata, za ekosistemom. Ako pak hoćete da koristite pun potencijal Hadoop-a i alata koji se dodaju na njega, onda dobro utvrdite šta vam je potrebno. Možete sami da stvorite svoj Hadoop ekosistem ili da koristite nešto poput HDP-a i sličnih rešenja koja su već pravljena tako da uključuju sve one alate koji se obično koriste u poslovnim analizama.

Projekti (alati) koji se dodaju na Hadoop

Hadoop Ecosystem

Hadoop Ecosystem

Na tržištu postoji mnogo alata koji su u relaciji sa Hadoop-om. Većina ih je pod Apache licencom, ali i firme poput Facebook-a i Microsoft-a razvijaju neke svoje alate koje možete da instalirate. Većina alata je besplatna, ja čak nisam dolazio u dodir sa nekim koji se plaćaju. Kako postoji mnogo alata, ja ih neću sve nabrojati, već ću dati neku njihovu osnovnu podelu i alate koje koristim, odnosno napisaću one koji dolaze uz HDP.

  • Distribuirani Fajl Sistemi (HDFS)
  • Distribuirano programiranje (MapReduce, Apache Pig, Apache Tez)
  • NoSQL baze podataka (Apache HBase, Apache Accumulo)
  • SQL baze podataka (Apache Hive, Apache HCatalog)
  • Unošenje podataka (Apache Flume, Apache Sqoop, Apache Storm)
  • Programiranje servisa (Apache Zookeeper)
  • Zakazivanje (Apache Oozie, Apache Falcon)
  • Mašinsko učenje (Apache Mahout)
  • Bezbednost (Apache Knox)
  • System Deployment (Apache Ambari, HUE)

Na sledećem linku je širi spisak projekata koji su vezani za Hadoop http://hadoopecosystemtable.github.io/ .

Kao što sam napisao, koristim HDP i naredni tekstovi će opisivati svaki alat koji dolazi uz ovu platformu pojedinačno. Neću opisivati neke dodatne alate, jer trenutno radim samo sa onima koji dolaze uz HDP i sa njima imam neko iskustvo. Možda nekad opišem još neki alat, ali ne bez prethodnog testiranja i korišćenja. Sledeći tekst je o Ambari-u, a onda prelazim na alate za analizu podataka, što znči i programiranje. Zato se spremite da nastavimo da hadupujemo zajedno!

YARN

Hadoop

Hadoop

Često se pominje, kada je Hadoop u pitanju, da su dve najbitnije komponente HDFS i MapReduce. Čuo sam to od mnogih sa kojima sam pričao. Obično se zapostavljaju druge dve komponente – Hadoop Common, o kojoj sam pisao u ranijim tekstovima, i YARN. Lično nisam usmeravao previše pažnje na ove komponente, ali u radu sa Hadoop-om se to promenilo, pogotovo ako ste odgovorni za rad samog klastera.

Šta je YARN?

U prvoj generaciji Hadoop-a YARN (Yet Another Resource Negotiator) komponenta nije postojala, već je njen posao bio sastavni deo MapReduce-a. YARN je uveden kao nova komponenta u drugoj generaciji Hadoop-a. Cilj je bio da se dotadašnji MapReduce odvoji u dva dela kako bi se olakšalo korišćenje čitave platforme. Glavna funkcija YARN-a je upravljanje resursima u klasteru. Može se reći da se sastoji iz dve komponente: Scheduler i ApplicationsManager. Izdvajanje ovog procesa u novu komponentu dovelo je do toga da je posao koji je ostao MapReduce-u samo obrada podataka. Ovo olakšava programerima i svima koji se bave Hadoop-om da bolje razumeju samu platformu i da je lakše koriste. Takođe, dobar deo aktivnosti je automatizovan sa YARN-om. Još jedna fantastična mogućnost koja se javila sa Hadoop-om druge generacije, odnosno sa YARN-om, je to da sada može da se pokrene više aplikacija koje su pisane za Hadoop. Ovo je posebno donelo benefite u poslovnom svetu, jer sama činjenica da možete paralelno da radite više stvari čini vas konkurentnim na tržištu, a pritom je dobar deo aktivnosti automatizovan. Bitno je spomenuti da je osim upravljanja resursima YARN dobio još neke komponente koje ću opisati u daljem tekstu.

Koji su glavni delovi YARN-a?

Kao što sam gore napomenuo, glavne komponente YARN-a su Scheduler i ApplicationsManager. Ove dve komponente su delovi Resource Manager-a.

YARN arhitektura

YARN

Scheduler je komponenta koja brine o alokaciji resursa aplikacijama koje se izvršavaju. Bitno je napomenuti da se vodi računa samo o resursima, odnosno ne brine se o tome kakav je status aplikacije koja se izvršava, tj. ne prati se rad aplikacije. Kako se brine samo o alokaciji resursa, ne vodi se računa o tome da li je došlo do greške ili je kod loš, što znači da će resursi biti dodeljeni nekoj aplikaciji dok god se njen rad ne prekine od samog korisnika ili neke druge komponente. Sa novim verzijama Hadoop-a ova komponenta se poboljšava i zato neću detaljno ulaziti u njen rad. Za početak je dovoljno znati ovo, a kako ulazite u priču sa Hadoop-om, više stvari će biti jasnije.

ApplicationsManager upravlja aplikacijama pisanim za Hadoop. Njegov zadatak je da prihvati posao i da pregovara. Možda zvuči čudno “da pregovara”, ali ova komponenta ispituje resurse i donosi zaključak šta treba prvo da se izvrši. ApplicationsManager komponenta je takođe zadužena i za to da restartuje posao, odnosno aplikaciju ako dođe do neke greške.

Resource Manager je glavna komponenta YARN-a, ali sarađuje sa komponentama koje su dodate YARN-u:

  • A per-application ApplicationMaster,
  • A per-node slave NodeManager i
  • A per-application Container running on a NodeManager.

Aplication Master je zadužen da u saradnji sa Resource Manager-om pregovara oko resursa i radi zajedno sa NodeManager-om kako bi pratili i izvršili neki zadatak. NodeManager je taj koji pregovara oko izvršavanja zadataka i šalje izveštaje Resource Manager-u. E sada, šta je Container? Najlakše je to objasniti ovako: kada Scheduler “uzme” resurse koji su potrebni za neku aplikaciju, on ih “stavi” u Container. Moram da naglasim da Container ne znači baš uzeti, nego Scheduler garantuje neke resurse i to onda predstavlja Container.

Yarn Container

Container

Ovo može da zvuči malo konfuzno i znam da jeste na prvi pogled, ali mora se nekako početi. U narednim tekstovima detaljnije ću opisati svaku YARN komponentu. Iz ličnog iskustva znam da je za početak potrebno znati samo osnove ove komponente, jer sami možete podesiti neke parametre vezane za memoriju i moj savet je da nikako ne zanemarite YARN, jer loše razumevanje može dovesti do toga da vam se aplikacije izvršavaju sporije nego što zapravo mogu. Cilj ove komponente je da efikasno koristite sve resurse koje imate.

Prednosti koji je doneo YARN

Skalabilnost – kako moć procesiranja i količina resursa konstantno rastu u centrima za obradu podataka, YARN mogućnosti su dobrodošle. Samo postojanje Scheduler komponente uveliko olakšava upravljanje velikim Hadoop klasterima.

Kompatibilnost sa MapReduce-om – već napisane aplikacije mogu da rade na YARN-u. Ovo se dobija tako što je sada MapReduce ugrađen na YARN-u.

Poboljšana iskorišćenost klastera – u prethodoj verziji Hadoop-a postojali su imenovani slotovi za svaki MapReduce proces, sada je to izbačeno i samo rezervisanje resursa je dovelo do velikog olakšanja. Mnogo je bolje imati Container koji je garantovan u odnosu na potrebe nego imenovani slot koji baš i nije fleksibilan.

Mogućnost Real Time obrade podataka – sa YARN-om je moguće pisati aplikacije po Graph processing i iterativnom modelu koji se kombinuju sa MapReduce-om. Rezultat je to da se dobijaju skoro pa u realnom vremenu rezultati neke obrade, što je posebno bitno za kompanije.

Podržana je agilnost što je posebno dobro pri pisanju aplikacija za Hadoop.

Možda zato što se pojavila sa drugom generacijom Hadoop-a, mnogi spominju da su najbitnije Hadoop komponente HDFS i MapReduce. To se može i reći za prvu generaciju Hadoop-a, ali danas većina klastera koristi Hadoop 2 i evidentno je da je YARN takođe postao komponenta kojoj treba posvetiti dosta pažnje. Ako stvarno želite da se bavite Hadoop-om i obradom velike količine podataka, nije dovoljno da napišete program koji radi ili da samo implemetirate Hadoop klaster u neki sistem. Važno je da to uradite na što efikasniji način. Stavite se na mesto neke kompanije koja želi da angažuje nekoga za Hadoop – sigurno će pre izbrati nekoga ko će dizajnirati sistem koji je jeftiniji i efikasniji nego suprotno. Moje je mišljenje da se treba jednako posvetiti svim Hadoop komponetama, jer ipak sve one čine Hadoop platformu dovoljno moćnom da se izbori sa zadacima koji jos se nameću.

Ovim tekstom završen je uvod u Hadoop kao platformu. Nastavljamo dalje o Hadoop ekosistemu, ali naravno i naprednije o samom Hadoop-u i primeni celokupnog sistema. Ovo je tek početak, zato se spremite da hadupujemo zajedno!

Bitna komponenta Hadoop-a, Map Reduce

U prošlom tekstu sam pisao o HDFS i njegovom značaju za Hadoop. Kada bismo imali samo Hadoop sa HDFS-om i Common paketom, to bi bila samo platforma za skladištenje velike količine podataka. Postavlja se pitanje zašto samo skladištiti podatke, to je glupo, a i skupo. Zato Hadoop ima posebnu komponentu koja će obradovati programere, MapReduce.

Šta je MapReduce?

MapReduce je programski model za procesiranje velikih količina podataka. Bitno je napomenuti da se njegov algoritam izvršava paralelno i distribuirano. Bliže govoreći, ako imamo klaster od tri servera, algoritam će se izvršavati paralelno, odnosno u isto vreme na sva tri servera.

MapReduce

Map Reduce

Ovaj model se može posmatrati i kao dve odvojene celine, deo Map i deo Reduce.

Map – Maper služi da sortira i filtrira podatke. Ovo može da bude i neko jednostavno sortiranje, sve zavisi šta vam treba. To može biti sortiranje studenata po prezimenu, na primer.

Reduce – Reducer sumira podatke koje je obradio Maper, odnosno na datom primeru sada lakše možemo izbrojati studente po nekom kriterijumu.

Maper ili Reducer možemo sresti i u funkcionalnom programiranju. Na primer, običan Bubble sort je Maper koji sortira podatke. Naravno, ne treba ovo posmatrati bukvalno i misliti da je prelako. Prava moć ovog modela je upravo to što imamo zajedno Mapere i Reducere.

Možda se sada neko pita: “Šta će meni Hadoop, pa ja mogu sve ovo da radim na računaru sa instaliranim Eklipsom ili Visual Studiom?”. To je logično pitati se kada posmatramo samo MapReduce bez razmišljanja o drugim komponentama Hadoop-a. Pre nego što je počeo da se koristi u Hadoop-u, MapReduce model se koristio u Google-u, ali nije bio toliko iskorišćen. Prava moć ovog modela se vidi kada se kombinuje sa HDFS-om.

U Hadoop verziji 1 MapReduce je služio za upravljanje resursima i za procesiranje podataka, dok je sada, u verziji 2, upravljanje resursima preuzela komponenta YARN o kojoj ću naknadno pisati. Znači, ako instalirate verziju 2 Hadoop-a, što i preporučujem, MapReduce služi samo za procesiranje podataka.

Logički model

Trebalo bi da napomenem logiku ovog modela, odnosno da pišem o strukturi podataka koju poštuje MapReduce. Map funkcija i Reduce funkcija poštuju strukturu par (ključ, vrednost). Map funkcija na početku prima jedan par (ključ, vrednost) u nekom domenu (podataka) i vraća listu parova u drugačijem domenu.

Map (key_1, value_1) —> list (key_2, value_2)

Ovo se izvršava paralelno. Kada se završi taj deo, MapReduce sakuplja sve iste ključeve iz liste i grupiše ih.

Nakon grupisanja nastupa Reduce funkcija koja se primenjuje paralelno na svaku grupu.

Reduce (key_2, list (value_2)) —> list (value_3)

Razlika u odnosu na funkcionalno programiranje je to što Reduce funkcija vraća list (ključ, vrednost) kao listu svih vrednosti, dok kod funkcionalnog programiranja dobijamo samo jednu vrednost.

HDFS i MapReduce

Map Reduce HDFS

Map Reduce HDFS

Prava moć ovog modela leži u kombinaciji sa HDFS-om. Već sam pisao o HDFS-u, ali da se podsetimo – svi podaci u HDFS-u se skladište na DataNode-u kao blokovi i na NameNode-u se čuvaju meta podaci o tim blokovima. Logički se nameće zaključak da kada su podaci podeljeni u manjim blokovima, lakše ih je obraditi. Sa ovakvim skladištenjem podataka lakše je Map funkciji da ih grupiše. Bitno je zapamtiti da MapReduce model radi sa podacima, odnosno blokovima, i to nikako ne znači da se za par (ključ, vrednost) uzima išta iz NameNoda. Prvo sam pomislio da ključ uzima vrednost iz NameNode-a, ali ne. Par (ključ, vrednost) znači “grupiši mi sva imena studenata po godini studija iz svih blokova (bez kopiranih)”, a onda Reduce sve to lepo spakuje i dobijemo rezultate sa svih blokova u bilo kom serveru izabranog klastera.

Za šta se koristi?

MapReduce model ima praktičnu primenu u Hadoop-u, odnosno mogu da kažem da programer ima dodira sa ovom komponentom. Kao što sam gore napisao, Hadoop samo sa HDFS-om je BigData skladište, što znači da imamo podatke i ništa više. Danas nije bitno imati novac da biste imali moć, potrebno je imati informaciju koju možete valjano da iskoristite. MapReduce je bitan deo pretvaranja podataka u informacije. Ako mogu da skladištim velike količine podataka i iz njih nešto izvučem, to je posao, tako se zarađuje novac i stiče moć, dok je skladištenje samo po sebi trošak. Danas velike firme poput Facebook-a, Twitter-a i ostalih koriste upravo Hadoop kako bi saznale naše navike, želje i to iskoristili da poboljšaju uslugu ili čak nešto što se nama ne sviđa, ali neću ulaziti u tu problematiku.

MapReduce Primer

Map Reduce Primer

Programski jezici

Kada sam počinjao sa Hadoop-om zanimalo me je koji programski jezik mogu da koristim da bih pisao MapReduce programe i koristio ih za analizu nekih podataka koje sam uspeo da sakupim. Odgovor je da se može koristiti bilo koji jezik, ali ipak se nekako sve svodilo na Javu. Meni u tom trenutku baš i nije odgovaralo da koristim nju jer sam na nekim drugim poslovima uveliko zagrebao PHP i Ruby. Bukvalno se par dana svelo na razmišljanje u kom jeziku ću pisati na početku. Malo pretrage na Internetu i naišao sam na nešto što se zove Pig Latin. Moram da priznam, delovalo je jako čudno – “svinja”. Našao sam primer koda u Javi koji je imao 140 linija, a u Pigu svega 15. To me je najviše nateralo da počnem da učim Pig. Sami razmislite šta je lakše i bolje. Naravno, Pig nije ultimativno rešenje za sve probleme i svakako preporučujem da se naoružate dobrim znanjem Jave i Python-a, ako želite da budete najbolji u pisanju MapReduce programa. O Pigu ću pisati u nekim od narednih tekstova, jer je on deo Hadoop ekosistema i može da vam uštedi dosta vremena, a i naučićete nešto novo.

Jedan savet: vodite računa kada pišete MapReduce kod da se pridržavate logike i da dobro savladate ovaj model. Iz iskustva znam da se može desiti da napišete neki kod koji je sintaksički ispravan, koji se čak i izvrši, ali bez rezultata samo zato što niste uradili MAP pa REDUCE.

Sledeći tekst je o YARN-u, pa da hadupujemo zajedno!