YARN

Č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.

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.

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!