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!

HCatalog

Šta je Apache HCatalog?

Apache HCatalog je alat koji omogućava lakše upravljanje skladištenjem podataka i tabelama na Hadoop-u, što pruža mogućnost korisnicima raznih alata za analizu podataka da lakše čitaju i pišu podatke. Praktično je HCatalog sloj na Hadoop-u koji omugućava prezentovanje podataka sa HDFS-a u vidu tabela i oslobađa korisnike briga o tome gde i u kom formatu su sačuvani podaci. HCatalog može da prikaže podatke koji su u RCFile formatu, tekstualne fajlove, sekventne fajlove i sve ih prikazuje u tabelarnom obliku. Još jedna zgodna stvar koja dolazi uz HCatalog je i REST API koji omogućava pristup tabelama i spoljnim korisnicima.

HCatalog Hue

HCatalog Hue

Kako HCatalog radi?

HCatalog podržava čitanje i pisanje fajlova u formatima za koje je moguće napisati Hive SerDe (Serializer-Deserializer), ali podrazumevani formati su oni koje sam već pomenuo. Da ne zaboravim, takođe, CSV i JSON su podržani kao podrazumevani. HCatalog je napravljen da radi sa Hive metastore servisom i uključuje Hive DDL komponente. Takođe HCatalog pruža i interfejs za Pig i MapReduce. U principu HCatlog zajedno sa Hive-om jako liči na poznati SQL, relacione baze podataka, u suštini razlika je u nijansama.

Primena

Kao što sam i napisao, glavni cilj ovog alata je prikaz podataka sa HDFS-a koji mogu da budu nezgodni za praćenje u izvornom obliku. Koliko sam do sad radio sa Hadoop-om, uvek sam i koristio HCatalog. Jako je dobro ako ubacite neke podatke u HDFS da proverite da li ste to dobro odradili, a dosta i olakšava rad ako obrađujete podatke koristeći Hive. Praktično, sa ovim alatom možete da struktuirate podatke i lakše ih obradite. Naravno, dešava se i da HCatalog ne može da bude primenjen. Na primer, ako imate neki tekst koji ste ubacili u HDFS i želite samo prosto da izračunate ukupan broj reči, nema smisla da svaku reč stavite u jedan red i da ih posle pomoću Hive-a prebrojite, nego ćete samo koristiti Pig i dobiti rezultat. Ako biste, na primer, želeli da znate broj svake reči onda biste prvo koristili Pig ili neki drugi MapReduce kod, a zatim dobijeni rezultat koji ste smestili u HDFS bi mogli da formatirate koristeći HCatalog. Ovo je samo primer da ovaj alat nije nužno koristiti uvek, ali takođe i ako se koristi ne mora da bude prvi korišćen. Trenutno koristim HCatalog da u tabeli prikažem logove i moram reći da je mnogo lakše kad se sve preradi HCatalog-om, pa zatim mogu da koristim Hive sa lakoćom.

HCatalog Terminal

HCatalog Terminal

Prednosti

Po mom mišljnju najveća prednost ovog alata je prikaz podataka. Činjenica da sa lakoćom možete od nekih nestruktuiranih podataka dobiti struktuirane je veliko olakšanje, posebno u  slučaju kada radite neku prostiju operaciju. Pogotovo ako možete koristiti Hive, onda vas postojanje ovakvog alata oslobađa DDL dela koda. Još jedna prednost je da je HCatalog podržan u Hue alatu kojeg sam opisao u prošlom tekstu. Na taj način na klik završavate veliki deo posla. Ovo je posebno zgodno za one koji ne vole terminal.
Sledeći tekst je o Apache Hive-u koji treba zajedno sa ovim tekstom da stvori celinu o jednom segmentu obrade podataka. Razmisljao sam o tome da li prvo da pišem o ovom alatu ili Hive-u i shvatio sam da iako su tesno povezani mogu se koristiti razdvojeno i za različite svrhe. Takođe, na vama je da utvrdite kada koristite koji. Ja samo mogu da opišem neka svoja trenutna iskustva. Moram reći da defintivno preporučujem da više proučite ovaj alat, posebno ako vas zanima obrada podataka. Nastavljamo zajedno da hadupujemo i čekaju vas neke nove stvari na blogu za koje se nadam da će biti od koristi.

Hue – Hadoop web interfejs

Hue je open-source web interfejs za Hadoop i njegov ekosistem. Napisan je u Python-u i podržava najčešće alate iz Hadoop ekosistema. Odličan je za one koji žele samo da koriste Hadoop bez da razmišljanja šta se dešava ispod, takođe ako ne želite da koristite komandnu liniju. Ovaj korisnički interfejs je dizajniran tako da objedinjuje sve instalirane alate iz ekosistema. Moram da priznam, dosta je lakše kada vam je sve na jednom mestu i kada ne morate da otvarate više Linux terminala da biste paralelno radili na dve strane. Moj prvi susret sa Hadoop-om je bio preko Hue interfejsa, to me je možda i ohrabrilo da nastavim dalje da istražujem Hadoop. Neko moje zapaženje je da je odlično u početku koristiti Hue, ali treba i pogledati malo šta se dešava ispod, jer je to odličan način da se nauči više. Mada ne treba stvar generalizovati, ako želite da se bavite samo analizom podataka onda je Hue sasvim dovoljan za vas, u slučaju da ste administrator Hadoop klastera ili implementator, to jednostavno nije dovoljno. Isto tako, ako ste Hadoop developer, Hue vam nije dovoljan. Jedna jako lepa stvar je da Hue ima svoj SDK, tako da možete i sami da pšete aplikacije koje će se izvršavati na vrhu Hadoop-a.

U svom radu sa Hadoop-om Hue gotovo i da ne koristim, ali moram da priznam odličan je kao fajl menadžer, HCatalog editor i Hive editor. Za ostale poslove radije se okrećem Linux terminalu. Takođe, Hue ne podržava sve alate. Skoro sam radio sa Apache Flume-om, jednim jako interesantnim alatom o kome ću pisati, on nije podržan u Hue-u. Isto tako, ako je vaš posao i instalacija Hue-a na postojeći Hadoop ekosistem, onda ćete se definitivno odlučiti za alternativu. Možda je to moj pogled na problem, ali uvek se desi da zaboravim nešto da podesim pri instalaciji Hue-a i onda neće potpuno da funkcioniše. Hortonworks uz HDP nudi i svoju verziju Hue-a koja sasvim radi posao, postoji i zvanična verzija koja je pod većim uticajem Cloudera-e. Ta verzija je vizuelno lepša, bar po mom mišljenju, takođe odlična je ako često koristite Sqoop alat.

Hue

Hue

Moj zaključak je da je Hue nekako više naklonjen onima koji se bave analizom podataka, onima koji se više bave Hive-om, SQL-om ili Impalom. Što se tiče pisanja nekog MapReduce koda u Javi ili Pigu definitivno treba koristiti Eclipse, pa terminal. Moram još jednom da napomenem da je Hue odličan kao fajl menadžer, ja ga najčešće za to koristim, kako bih lakše video rezultate rada. Testirao samo mnoge elemente i alate Hadoop-a, ali ovo je nešto što trenutno mislim o upotrebi Hue-a.

Savet je da proučite Hue, da probate, da vidite šta vam odgovara, da radite u njemu, ali definitivno ako želite da što više naučite o Hadoop-u, onda probajte da ne koristite Hue. Ne bih da zvučim kao neko ko obožava Linux terminal, nisam ga čak ni koristio dok nisam počeo da se bavim Hadoop-om. Što više razumete Hadoop, rad iz terminala je dosta moćniji.
Ovo je bio samo kratak pregled šta je Hue, kako sam ga ja video i kako ga koristim. Nisam želeo puno da detaljišem, jer ne koristim Hue nešto preterano puno, ali sam siguran da može da se upotrebi mnogo bolje nego što ja to trenutno radim. Sve u svemu, ovo je jedan dobar alat i može da bude jako koristan. Sledeći tekstovi o interesantnim temama poput Pig, Hive, Sqoop…  Spremite se da hadupujemo zajedno!

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!