Članci

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!

Hadoop komponente

Evo konačno da krenem detaljnije da pišem o Hadoop-u. Smatram da je bitno krenuti od njegove srži, odnosno od komponenata od kojih je sačinjen. Kada sam počinjao da radim sa ovom tehnologijom imao sam utisak da je ovo dosadno, da bih možda mogao da preskočim neke detalje, odnosno da apstrahujem celu tematiku. Naravno, to je bilo totalno pogrešno što se i ispostavilo pre par nedelja kada sam imao problem sa izvršavanjem nekih procesa. Zato je moj savet prvo dobro savladati Hadoop komponente i filozofiju, pa tek onda preći na praktičnu primenu i korišćenje ostalih Apache projekata koji se grade na Hadoop.

Nije bitno da li ste programer, analitičar ili administrator Hadoop klastera, bitno je znati na čemu radite, odnosno sa čim. Obećavam da ću u nekom od narednih tekstova opisati i Hadoop poslove. Na kraju krajeva, nije moguće baš sve znati, posebno ne u ovoj kompleksnoj tehnologiji koja nalazi sve više primena i za koju se rađaju nove poslovne mogućnosti. Elem, o tome kasnije, da se vratim na najbitnije komponente.

 hadoop

Može se reći, a tako kažu i tvorci, da se Hadoop sastoji od sledećih komponenti:

  • Hadoop Common paketa,
  • Hadoop Distributed File System(HDFS),
  • Hadoop YARN i
  • Hadoop MapReduce.

U ovom tekstu ću najviše pažnje posvetiti prvoj komponenti – Hadoop Common paketu, dok ću za ostale dati kratak pregled i u kasnijim tekstovima ih detaljno opisati. Ono što sam do sada radio dovelo me je do zaključka da mi je u radu najviše bilo potrebno poznavanje HDFS-a i MapReduce-a, što nikako ne znači da su ostale komponente manje bitne. Jednostavno, sa mojim trenutnim znanjem to se pokazalo jako bitnim.

Hadoop Common paket sadrži potrebne Java arhive odnosno JAR fajlove i skripte koje služe za pokretanje Hadoop-a. Ovaj paket takođe sadrži source kod i dokumentaciju. Isto tako, ovde se nalaze i svi potrebni elementi za komuniciranje Hadoop-a sa ostalim alatima. Iskreno, nisam se upuštao previše u ovaj paket jer mi je bilo bitno da znam šta sadrži. Tačnije prilikom moje prve instalacije shvatio sam da je struktura ovog paketa blago izmnenjena u odnosno na različite verzije. To sam shvatio kada sam proučavao dve različite verzije Hadoop-a. Ne želim detaljno o tome ovde da pišem jer te sitnije detalje je moguće i da ne primetite ako, na primer, instalirate Hadoop koristeći Ambari. Ovde je bitno shvatiti da je Hadoop pisan u Java programskom jeziku što bi trebalo da znači da je potrebno da znate Javu savršeno, ali to nije preduslov da počnete da se igrate sa Hadoop-om. Moj savet je ne kopati previše po ovim fajlovima, jedino na šta treba obratiti pažnju su konfiguracioni fajlovi. Koliko god da je proces instalacije automatizovan pomoću Ambari-a i dalje je potrebno malo menjati neke vrednosti. Za ovo je potrebno menjati XML. Važno je samo poznavati osnovnu strukturu XML-a, da biste uspešno podesili konfiguracione fajlove. Nešto puno detalja o ovom paketu nećete naći nigde, jer mislim da je njegovo detaljno poznavanje potrebno jedino ako želite da se bavite razvojem samog Hadoop-a.

 hadoop komponente

HDFS je jako bitna komponenta. To je praktično fajl sistem koji koristi Hadoop i ovde je definisano kako se podaci skladište, kopiraju i čitaju. HDFS je zaslužan za mogućnost lakog skladištenja ogromne količine podataka. Prvi put kad sam se susreo sa ovim pomislio sam – “Fajl sistem – ok! Šta je to tako spektakularno?! Hoću da vidim šta Hadoop “radi”.”.  Na teži način sam shvatio da je jako bitno poznavati HDFS, tj. nepoznavanje ove komponente dovelo je do gore napomenutog problema u izvršavanju. Zapravo, nisam dovoljno dobro isplanirao memoriju Klastera i kolaps(!). O HDFS-u sledi poseban tekst.

Hadoop YARN je framework za zakazivanje poslova i upravljanje resursima. Kada radite Hadoop sve se vrti oko tih poslova, odnosno svaki proces, izvršavanje, pokretanje, kontrolisanje se smatra poslom. YARN služi da upravlja tim poslovima u odnosu na resurse. Ovo je jako kompleksna komponeta i uvedena je sa Hadoop-om 2.0. Predstavlja poboljšanje osobina MapReduce-a. U Hadoop-u 1.0 sve što sada obavlja YARN obavljao je MapReduce, ali se na ovaj način došlo do poboljšanja rada celine. Iskreno, za sada YARN mi deluje kao potpuno automatizovan proces i do sada sam pratio samo iskorišćenost radne memorije kojom upravlja ova komponenta. Shvatio sam da se obično vidi neki rad YARN-a prilikom pokretanja Pig skripti.

 BigData

MapReduce je sistem baziran na YARN-u i predstavlja model paralelnog procesiranja velike količine podataka. Ova komponenta je posebno zanimljiva Hadoop programerima jer sve što se programira za Hadoop, bilo da radite u Javi, Pythonu, Pigu ili bilo kom programskom jeziku, mora da poštuje ovaj model.

Namerno nisam hteo detaljno da opisujem komponente jer slede tekstovi za svaku osim za Hadoop Common. Ovo bi trebalo da predstavlja samo neku vrstu pripreme za dalje tekstove. Trudim se da vas polako uvodim u ovaj svet, jer ovo nije moguće preko noći naučiti. Spremite se, sledeći tekstovi su o Hadoop-u detaljno, pa da zajedno hadupujemo! 🙂