Članci

Apache Pig

Interesantno ime, moćan alat, skriptni jezik… Ovo su neke od reči koje opisuju Apache Pig, još jedan popularan deo Hadoop ekosistema. Ovaj alat je posebno interesantan programerima, a i analitičarima. Prvi put kada sam čuo za Pig, nisam obraćao puno pažnje, ali tokom rada sam uvideo da je ovo jedan odličan dodatak koji vam štedi vreme i jako je moćan.

Šta je Apache Pig?

Apache Pig je platforma za pisanje MapReduce programa. Jezik koji se koristi pri pisanju ovih programa se naziva Pig Latin. Tehnički gledano, Pig je platforma, a Pig Latin je programski jezik (obično se kaže samo Pig i pritom misli na Pig kao programski jezik). Ovaj programski jezik malo liči i na SQL, ali postoje suštinske razlike o kojima ću pisati u nastavku teksta. Originalno Pig je razvijen u Yahoo-u, ali je postao deo Apache fondacije, sada je otvoren za javnost i besplatan je. Iz ličnog iskustva mogu reći da je Pig lak za učenje, na Internetu postoji dosta materijala i primera. Jedna odlična mogućnost koja krasi ovaj alat je nadogradnja, odnosno moguće je pisati dodatne funkcije koje ne postoje u samom porgramu. Za pisanje tih funkcija moguće je koristiti Javu, Python, JavaScript, Ruby ili Groovy. Nešto što se meni posebno svidelo je to da je optimizacija automatska i da se ja, kao korisnik ovog alata, mogu fokusirati više na pisanje koda, nego da brinem o efikasnosti izvršavanja istog.

Čemu služi?

Pig Latin podržava transformaciju podataka uz pomoć agregacije, JOIN-a, SORT-a. Najbitnija namena Pig-a je pisanje MapReduce koda na jednostavan način. Na sajtu Hortonworks-a našao sam odličan tekst o tome kada se koristi Pig, koji kaže da je ovaj alat namenjen prvenstveno za tri Big Data posla:

  • ETL(extract-transform-load) poslove,
  • rad nad sirovim podacima i
  • iterativno procesiranje podataka.
Pig Word Count

Pig Word Count

Do sada, koliko sam mogao da koristim Pig, a da to nije samo testiranje ovog alata, najčešće sam koristio za rad nad sirovim podacima. Posebno je dobro koristiti Pig ako radite sa nekim tekstom, odnosno sa podacima koje je teško struktuirati u vidu tabele pomoću HCatalog-a. Najbolji primer koji sam imao u skorije vreme je da sam pomoću Flume-a, o kojem ću pisati u nekom od narednih tekstova, povukao podatke sa Twitter streaming-a. Podataka je bilo previše u tom smislu da nije imalo smisla da se od njih napravi tabela  direktno iz sirovog oblika. Postoji dosta primera na Internetu kako se piše brojanje reči, iz tog razloga neću to ovde navoditi kao primer. Probajte da nađete taj primer napisan u Pig-u i u Javi, čisto da vidite koliko je moćan i jednostavan. U jednoj knjizi o Pig-u sam pročitao nešto o tome zašto se zove baš tako i objašnjenje je glasilo – “jede sve, živi svuda”. To bi značilo da ovaj alat može da radi sa bilo kojim tipovima podataka, bili oni struktuirani ili ne. Naravno, neko moje iskustvo govori da nije uvek najbolje rešenje koristiti Pig, ali to zavisi od slučaja do slučaja. Ako se pitate kako odrediti kada koristiti, a kada ne ovaj alat, moj savet je da probate na nekim manjim primerima razne situacije i tako ćete najbolje shvatiti. Lično mi je najjasnije bilo tek kada sam probao.

Kako Pig radi.  

Pig je napravljen tako da apstrahuje MapReduce kod napisan u Javi. Da pojasnim ovo: ako napišete kod u Pig-u, on će se prvo prevesti u Javu, pa će se zatim izvršiti. Za razliku od SQL-a koji je deklerativni programski jezik, Pig je data flow jezik, što znači da program koji se piše definiše kako će se transformisati podaci. Skripte napisane u ovom jeziku mogu da budu grafovi, što znači da je moguće pisati složene transformacije, imati više ulaza i više izlaza. Jako je bitno da napomenem da Pig može da radi u dva stanja, lokalno i MapReduce stanje. Prvo znači da Pig pristupa samo jednoj mašini i sve se nalazi na njoj, za razliku od MapReduce stanja koje je podrazumevano i znači da se pristupa podacima iz Hadoop klastera distributivno. Lično nisam probao lokalno da radim u Pig-u, tako da ne znam ništa detaljnije o tome.

Pig radi sa relacijama, koje imaju malo drugačije značenje nego relacije u relacionom modelu. Relacija u Pig-u je bag ili vreća, a ta vreća se sastoji od tuples-a. Ako bismo napravili poređenje sa tabelama u relacionom modelu, tuples su redovi. Glavna razlika je da bag nije tabela, jer tuples ne moraju da budu sortirani, ne moraju da budu istog tipa  u istoj koloni, takođe tuples ne moraju biti istih veličina. Bitno je napomenuti da Pig podržava i sve poznate tipove podataka kao što su int, long… i u ovom slučaju složeni tipovi su tuple, bag i map.
Apache Pig je jako složena platforma i nije moguće opisati sve u jednom tekstu. Primere sam za sada izostavio, jer sam želeo da krenem sa uvodom. Možda je jedna od mojih grešaka to što sam baš i počeo sa primerima, a da nisam ni shvatao šta je i kada se koristi ovaj alat. Sve u svemu, jako koristan alat i preporučujem da probate. Sa Hortonworks sajta je moguće skinuti Sandbox VM sa Hadoop-om i sve ovo probati. Nadam se da ću uskoro napišati još jedan tekst o ovom alatu ili ako je neko koristio, neka se javi da podeli iskustva. Spremite se da nastavimo da hadupujemo zajedno!

Hive, SQL za Big Data

Često sam čuo pitanje “Da li je Hadoop zamena za relacione baze podataka?”. Odgovor na ovo pitanje je krajnje jednostavan – NE. Hadoop je samo nadogradnja na sve postojeće tehnologije koje obrađuju podatke,  šta više, često se kombinuju relacione baze i Hadoop. Detaljan tekst o ovome ostavljam za neke kasnije dane, ali sam morao da pomenem makar na kratko zbog opisa predstojećeg alata.

Primer

Primer

Šta je Apache Hive?

Apache Hive je infrastruktura za skladištenje podataka izgrađena na Hadoop-u. Služi za obradu podataka. Hive takođe predstavlja de fakto standard za SQL upite nad velikim količinama podataka, odnosno Big Data. Hive pruža nešto što se naziva HiveQL koji je jako sličan SQL-u. Čak sam negde pročitao da je pravljen po SQL standardima iz ‘92. godine. Podržava dosta funkcija koje ima standardni SQL, ali je i dalje u razvoju. Ovo je jako dobro za one koji su već upoznati sa rasprostranjenim SQL-om, što znači da je razdaljina od početka učenja do korišćenja Hive-a jako mala. Ovaj alat se lako integriše sa postojećim alatima korišćenjem JDBC ili ODBC interfejsa, tj. moguće je povezati i sa excel-om i drugim sličnim alatima.

U suštini Hive je tu da olakša organizovanje i skladištenje velikih količina različitih podataka iz različitih izvora. Hive pruža mogućnost korisnicima da pretraže, struktuiraju i analiziraju podatke za BI (poslovna inteligencija).

Kako funkcioniše?

Način rada Hive-a je jako sličan relacionom modelu, tabele su slične tabelama iz relacionog modela, a podaci su organizovani u taksonomiji od većih ka manjim jedinicama. Baze su sačinjene od tabela, a tabele od particija. Podacima se pristupa poznatim upitima koji su identični SQL-u, razlika je da Hive ne podržava brisanje i ažuriranje podataka. Neko će se pitati zašto je tako. Ako se sećate, u tekstu o HDFS-u sam pisao da se podaci samo mogu upisivati, ali ne i menjati, a kako Hive radi na Hadoop-u, onda je logično zašto je to tako. Ovo je neko moje razmišljanje zašto je to tako, verovatno da će u budućnosti i ove opcije biti moguće.

Hive Arhitektura

Hive Arhitektura

U svakoj bazi podataka, podaci u tabelama su serijalizovani i svaka tabela ima odgovarajući HDFS direktorijum. Takođe, podatke je moguće podeliti i u particije zbog lakšeg organizovanja, nadalje podaci se mogu podeliti u  manje celine (buckets). Hive podržava primitivne tipove podataka kao što su TIMESTAMP, STRING, FLOAT, BOOLEAN, INT, BIGINT…

Kada i ko koristi Hive?

Prošli tekst je bio o HCatalog-u i dosta puta sam spomenuo Hive. Iz nekog svog iskustva – ako sam mogao da iskoristim HCatalog onda sam u većini slučaja koristio i Hive, možda zbog toga što sam upoznat sa SQL-om, ali i zbog prirode podataka sa kojima radim. Oni koji su probali da rade Hadoop ili počinju da rade obično koriste Hive. U principu Hive je jako moćan alat, ali nije za sve. Treba voditi računa kada ga koristiti, ali za početak rada sa Hadoop-om, odnosno sa obradom velike količine podataka svakako preporučujem Hive. Jedna interesantnost je da Facebook jako puno koristi ovaj alat i dosta doprinosi njegovom razvoju.

Primer

Primer

O Hive-u bih mogao još dosta da pišem, ali trudim se da ovi uvodni tekstovi budu kratki i precizni. Jako je nezahvalno pisati o ovakvim alatima jer oni traže primere, što bi uskoro i trebalo da se nađe na blogu. Ako je neko više zainteresovan uvek može da ostavi komentar ili mi pošalje mail. Trenutno sa kolegama radim dosta baš sa Hive-om. Ja lično malo više oko optimizacije samog alata i podešavanja memorije, ali nadam se da mogu da pomognem oko dosta pitanja. Preporučujem da malo istražite ovaj alat, na internetu ima mnogo materijala, a kao što je i pomenuto, sličan je SQL-u, pa možete da tražite i takva rešenja. Ohrabrujem one koje zanima Hadoop da mu se što više posvete, jer polako dolazi vreme kada Hadoop kuca i na vrata kompanija u Srbiji. Sledeće nedelje novi tekst, nadam se još interesantniji, pa budite tu da zajedno hadupujemo!

Apache Ambari

Šta je Ambari? U svakom radu potrebna je kontrola onoga što radite, tako i kada administrirate Hadoop klaster, želite da to uradite što lakše i bezbolnije. Apache Ambari je projekat razvijen kako bi olakšako administratorima rad sa Hadoop klasterom. Ovaj alat pruža web interfejs koji je po mom mišljenju jako jednostavan, minimalistički, odnosno pruža vam tačno ono što vam je potrebno. Ambari korisnicima pruža sledeće mogućnosti:

  • Upravljanje Hadoop klasterom
  • Praćenje metrika Hadoop klastera
  • Instalacija i podešavanje Hadoop-a

Upravljanje Hadoop klasterom – Pokretanje, zaustavljanje, rekonfigurisanje Hadoop servisa je jako jednostavno korišćenjem Ambari-ja. Ovaj alat pruža mogućnost da izaberete bilo koju mašinu iz klastera i da u njoj uradite neku od navedenih akcija. Ovo se bukvalno radi u nekoliko klikova, jako je pregledno čak i kada imate mnogo mašina u klasteru. Bitno je da napomenem da je sa verzijom 1.5.1 dodata mogućnost restartovanja nekog servisa, što se ranije radilo na način “zaustavi, pa pokreni”. Osim ovoga, interesantno je da sada možete da primenite istu akciju i na više mašina po vašem izboru, što uveliko koristi ako imate 1000 instanci, a želite istu stvar da uradite na 200. Jako je zanimljivo što sada neki servis možete da stavite u Maintence Mode, što znači da vam neće svetleti crvena lampica ili stizati milion mejlova da nešto nije u redu. Nekada nešto nije moguće popraviti za sekundu, a možda i servis koji je otkazao nije prioritet za klaster, pa može da čeka.

Ambari Hadoop

Ambari

Praćenje metrika – Ambari pruža odličan interfejs za praćenje bitnih pokazatelja klastera. Sa lakoćom možete videti koliko prostora vam je ostalo u klasteru, kakvo je stanje NameNode-a i slično. Ovaj deo Ambari-ja je napravljen tako da sakuplja podatke sa Ganglia i Nagios servisa, tako da možete da dobijate mejlove ako se nešto pokvari. Sami podešavate za šta treba da vam stigne mejl i koje su granice koje neki pokazatelji ne bi smeli da pređu.

Instalacija i podešavanje Hadoop-a – Hadoop klaster je moguće instalirati i korišćenjem Ambari-ja. Na početku je dovoljno instalirati Ambari server na samo jednoj mašini, koja čak ne mora da bude u klasteru. Sve što treba da uradite je da pokupite sa mašina ključeve za autentifikaciju kako bi Ambari server mogao da “pošalje” svoje agente na svaku izabranu mašinu. Ovo je neophodno da bi Ambari imao privilegije da se konektuje na mašinu bez korisničkog imena i šifre. Ceo proces instalacije je jednostavan. Sve ovo sam  testirao na Centos operativnom sistemu, a što se tiče Windows operativnog sistema za instalaciju ne morate koristiti Ambari, već postoji drugi način koji je onakav na kakav ste navikli ako koristite Windows. Iskreno, nisam siguran da li možete da koristite Ambari za instalaciju Hadoop-a na Windows-u, ali sigurno je da možete koristiti njegove ostale funkcionalnosti bez obzira koji operativni sistem koristite. Nakon instalacije, korišćenjem web interfejsa možete uraditi one “sitnice” koje su jako bitne za rad klastera.

Zašto koristiti Ambari?

Ambari je prvenstveno namenjen sistem administratorima, ali bih svakako preporučio svakom ko se bavi Hadoop-om da nauči neke osnovne stvari o njemu. Na primer, ako ste Hadoop developer i pišete neku aplikaciju, preporučljivo je da pratite koliko resursa koristi ta aplikacija i da li ih ima dovoljno. Na kraju se ipak sve svodi na to da sve što uradite treba da bude optimalno. Mogu da kažem da mi je ovaj alat mnogo olakšao administraciju Hadoop klastera, a radio sam instalaciju Hadoop-a i bez Ambari-ja i sa njim. Mnogo je jednostavnije implementirati klaster korišćenjem Ambari-ja, mada ako želite da naučite što više o Hadoop-u, savetujem da prvi put instalirate bez korišćenja ovog alata, ukoliko imate tu mogućnost. Ambari je posebno olakšanje za nekoga ko ne poznaje Linux dovoljno dobro. Lično se više bavim implementacijom i administracijom, kao i testiranjem raznih mogućnosti Hadoop-a. Imam samo pozitivne reči za ovaj alat. Kao što sam pomenuo, kada pišem i testiram neku aplikaciju uvek otvorim i Ambari kako bih pratio stanje klastera pri njenom testiranju. Još jedna mogućnost koju pruža Ambari je i RESTful API, tako da ga možete povezati sa vašom aplikacijom.

Sledećih desetak tekstova biće vezani za alate koje sam opisao u tekstu Hadoop ecosysem, a posle toga nešto više o primeni Hadoop-a, primerima i savetima iz prakse. Ovo je tek početak, zato se spremite da i dalje hadupujemo zajedno!

Susret sa Hadoop-om

Prvi put sam čuo za Hadoop pre oko šest meseci na jednoj konferenciji. Nisam imao pojma šta je, niti čemu služi. Predavač je govorio o tome kako se Hadoop koristi za BigData i kako je jako moćan. Napomenuo je i: “Ako želite nešto ozbiljno da radite u IT-u, krenite ovo. Hadoop je nova tehnologija, nije još iskorišćena. Batalite Cloud tehnologije, mnogi to rade.”. Pitao sam se o čemu priča. Kako sam uvek bio znatiželjan, po završetku predavanja googlao sam o Hadoop-u. Na prvi pogled mi ništa nije bilo jasno, ali evo danas mogu da se pohvalim nekim srednjim teorijskim i početnim praktičnim iskustvom. U ovu avanturu sam se upustio sa nekoliko prijatelja.

hadoop

Hadoop

Rešio sam da počnem da pišem ovaj blog kako bih prebližio Hadoop tehnologiju zaintersovanima iz Srbije i regiona. Nadam se da će nekog zainteresovati ova tema kako bi se stvorila i zajednica koja bi doprinela lakšem učenju i primeni ove tehnologije. Potrudiću se da opišem neka lična iskustva, jer trenutno imam priliku da testiram Hadoop i sve što ide uz njega. Moram priznati da nije jednostavno raditi nešto novo, ali je jako interesantno. Zamislite samo kako je tražiti rešenje nekog problema preko googla i ne naći ga! Tada vam jedino preostaje da postavite pitanje i nadate se odgovoru ili da potpuno sami smislite rešenje.

Ukratko rečeno Hadoop je open-source software framework Apache fondacije. Služi za skladištenje i procesiranje velikih količina podataka. Kada kažem velike količine, mislim na više TB (terabytes), a možda je bolje reći i PB (petabytes). U današnje vreme sve je više podataka i sve se vrti oko toga da se iz podataka izvuku informacije, da se upotrebe i da se stekne profit. Zamislite kako Facebook i Twitter obrađuju podatke, zamislite koliko je kompleksno to uraditi, a da pritom to treba uraditi što brže da bi pobedili konkurenciju.

Hadoop je nastao 2005. godine od strane Doug Cutting i Mike Cafarella. Ime je dobio po slonu, igrački Cutting-ovog sina. Napisan je u Java programskom jeziku. Može se reći da su najbitniji elementi Hadoop-a njegov fajl sistem HDFS (Hadoop Distributed File System), MapReduce model i YARN platforme o kojima ću kasnije detaljnije pisati. Naravno moram da napomenem da Hadoop kao sam nije toliko moćan. Postoje razni Apache projekti koji se dodaju na Hadoop i svi zajedno čine Hadoop ecosystem. U ovoj fazi izučavanja Hadoop-a najviše sam se upoznao sa Pig-om (Apache Pig), Hive-om, HCatalog-om, HBase-om i Sqoop-om. Naravno na putu sam da se upoznam i sa Flume-om, ZooKeeper-om i Oozie-om, tako da ću ubuduće pisati o svim Apache projektima vezanim za Hadoop. Posebno moram da istaknem Ambari, koji služi za upravljanje Hadoop klasterima, a može da posluži i za instalaciju Hadoop-a. Naravno tu je i Hue koji predstavlja neku vrstu web GUI-a za Hadoop ecosystem.

 hadoop

Danas postoje firme koje nude Hadoop okruženja, odnosno nude paket alata i programa koji služe da se lakše instalira Hadoop i ostali alati. Najpoznatiji su Hortonworks, Cloudera, MapR…. Lično koristim Hortonworks HDP jer je open-source i besplatan je.

Uskoro ću detaljno opisati svaki deo Hadoop ekosistema i potrudiću se da ne odem samo u teoriju nego da pokažem i primere, kao i neka svoja iskustva.