Članci

Apache Spark – Kako početi?

Kako Spark sve više dobija na popularnosti, rešio sam da pored Hadoop-a počnem da pišem više i o ovom alatu. Prvo da još jednom napomenem da Spark nije zamena za Hadooop, već jedan odličan dodatak. Mi u firmi se često igramo sa njim i dobijamo odlične rezultate. Ovaj tekst će biti o tome kako da podesite okruženje za testiranje Sparka.

Za razliku od Hadoop-a koji je malo teže testirati na laptopu ili desktop računaru, Spark možete sa lakoćom. Postoji nekoliko načina da to uradite. Pored svega toga, aplikaciju koju ste napisali na svom računaru možete da pokrenete i na klasteru uz male ili nikakve izmene.

Zahtevi i instalacija

Spark može da radi kako na Windows-u, tako i na UNIX-like sistemima. Pre svega morate da imate instaliranu Javu i da joj bude podešena putanja, Python 2.6+, R 3.1+ i naravno kako je i sam pisan u Scala-i potrebno je da imate i instaliranu Scala-u verziju 2.10.x. Pored toga poželjno je da imate instaliran i SBT i/ili Maven.

Sledeće, na download stranici potrebno je da skinete, preporučujem, poslednju verziju Sparka koja je već spremna za neku verziju Hadoop-a, kako vi to ne biste morali da radite. Možete da iskoristite OVAJ link. Uradite unzip fajla i smestite Spark u željeni folder (Program Files ili Home). Ono što ja radim jeste da pravim “symbolic” link kako biste lako mogli da menjate verzije.

~$ ln -s /putanja do sparka/spark-1.4.1 putanja/gde/želite/symlink

I naravno na kraju podesite Bash profil.

export SPARK_HOME= putanja do symbolic linka
export PATH=$SPARK_HOME/bin:$PATH

Nakon toga možete da probate da li ste sve uspešno podesili, pokrenite spark-shell ili pyspark.

sparkconsole

Postoji nekoliko načina na koje možete da pišete i testirate aplikacije. U konzoli, što i nije baš lepo, posebno ako su u pitanju kompleksniji programi ili ako želite da ih ponovo pokrećete, drugi način jeste da iskoristite svoj omiljeni IDE i da u njemu pišete Scala, Python ili Java kod. Mana kod ovakvog načina jeste to što je naporno stalno testirati odrađeno. Ali to nije sve, uz Spark su se razvijali i dodatni alati koji olakšavaju pisanje Spark aplikacija.

Apache Zeppelin

Ovaj alat se koristi u HDP-u, standardan je i u klasteru koji možete da podignete na Azure-u. Dosta je sličan IPython-u, čak i Databricks koristi sličan alat za svoju platformu. U principu koristeći ovaj alat ne morate da imate instaliran Spark, plus možete da ga koristite za još neke alate. Možete sa github-a da skinete poslednju verziju i ispratite uputstvo i tako lako dobijete okruženje za razvoj Spark aplikacija. Jedino nisam siguran kako radi na Windows-u, takođe Java nije podržana.

Pored toga izvršavanjem SparkSQL upita dobijate i automatski vizualizacije koje možete da ubacite na vaš sajt. Još jedan fin dodatak jeste što možete da odredite i vreme kad će vaša aplikacija da se pokrene.

Mislim da ovaj alat može da bude odličan i za produkciju, jer je moguće podesiti Zeppelin da koristi Spark na klasteru i ako korisitite pored toga Hive ili Cassandra-u, onda imate IDE za više alata.

IPython Notebook

Ako i vi volite Python i ako ste upoznati sa IPython-om onda to možete da iskoristite. Za razliku od Zeppelina koji može se reći da je baš orijentisan ka Spark-u, IPython možete da koristite samo za PySpark i ne pruža vam mogućnost automatske vizualizacije podataka. Pre se može reći da na ovaj način testirate Python i PySpark odnosno njihovu kombinaciju.

Prvo je potrebno instalirati IPython. Pretpostavljam da ako se neko opredeli za ovaj način, onda već ima i koristi ovaj alat. Takođe potrebno je podesiti Spark putanje kao na početku teksta.

Sledeće, potrebno je profil za Spark kako ne bi mešali sa drugim Python projektima.

~$ ipython profile create spark

Kreirajte fajl ako ne postoji

$HOME/.ipython/profile_spark/startup/00-pyspark-setup.py

Dodajte sledeći kod:

import os
import sys

if 'SPARK_HOME' not in os.environ:
    os.environ['SPARK_HOME'] = 'putanja do symbolic linka'

SPARK_HOME = os.environ['SPARK_HOME']

sys.path.insert(0, os.path.join(SPARK_HOME, "python", "build"))
sys.path.insert(0, os.path.join(SPARK_HOME, "python"))

Pokreniti novi profil:

~$ ipython notebook --profile spark

Testirajte da li je sve ok:

print SPARK_HOME
from pyspark import  SparkContext
sc = SparkContext( 'local', 'pyspark')

ipy

Pored ova dva alata možete isprobati i Spark-Notebook koji nisam još stigao da testiram. Probajte, pa javite utiske.

Lako testiranje je jedna od velikih prednosti Spark-a. Naravno, nikako nije preporučljivo na ovaj način koristiti Spark u produkciji. Nadam se da sam vam malo približio Spark. Namerno nisam hteo da ovaj tekst bude Spark demo, jer na ovaj način sada može bilo ko da se igra sa Spark-om. Demo možemo da ostavimo za novoosnovanu meetup grupu, pa ako ste zainteresovani, javite da se organizujemo. Nastavljamo da hadupujemo sa novim tekstovima o Hadoop-u i Sparku.

Hadoop i Apache Spark u Srbiji

Posle duže pauze vraćam se pisanju. Prošlo je nešto više od godinu dana od pokretanja bloga i jako sam zadovoljan, a nadam se da ste i vi. Analitika kaže da vas ima mnogo i da ste redovni, tako da je mene malo sramota što ja nisam, ali potrudiću se da to ispravim. Odmah da kažem da ovaj tekst neće biti pun tehničkih detalja, malo ću da vam pišem o Sparku, a malo o tome kako napreduje Hadoop u Srbiji i regionu.

Pre svega, moram da primetim da se o Big Data tehnologijama priča i kod nas, i to mnogo više nego pre godinu dana. Čak su i neke kompanije počele da razmišljaju na tu temu kako bi stvorile ili pojačale konkurentsku prednost. To je kolegu Miloša i mene navelo na ideju da pokrenemo firmu koja se bavi Big Data tehnologijama. Prvi klijenti su nam već ukazali poverenje, pa tako mogu da se pohvalim da smo jedina kompanija koja se usko bavi samo ovim tehnologijama. To znači da će novi tekstovi biti dodatno poboljšani novim iskustvima koje stičemo na projektima. Firma se zove Things Solver. Želim da napomenem da ovaj blog neće postati korporatvni i da će i dalje imati svrhu širenja znanja i svesti o Big Data tehnologijama sa akcentom na Hadoop-u. Za kratko vreme postojanja postali smo partneri sa Hortonworks-om i Clouder-om, pa dodatno možemo da doprinesemo ovom blogu i zajednici. Pored toga, prilično mnogo vremena je uloženo i u testiranje nekih novih tehnologija o kojima će biti reči u narednim tekstovima.

Možete očekivati da će Hadoop Srbija aktivnije sarđivati i sa ostalim IT zajednicam u Srbiji. Naime, bio sam predavač na dve značajne domaće konferencije, #Tarabica i ITKonekt. Pozitivno sam oduševljen odzivom ljudi. Nadam se da ćemo biti u mogućnosti da i mi organizujemo jedan Hadoop događaj. Voleo bih da se jave svi oni koji čitaju blog, a imaju relevantna iskustva kako bi ih podelili ovde.

Na početku sam spomenuo Spark koji je relativno nova tehnologija i za godinu dana je osvojio dosta poena na tržištu Big Data alata. IBM je pre nekoliko dana objavio da će 3500 njihovih developera i istraživača pomoći u dodatnom razvoju ovog alata. Proteklih dva meseca smo se aktivno bavili ovom tehologijom i nismo je još primenili u produkciji, ali se nadam da ćemo uskoro. Spark je jak, jednostavan alat i predlažem da ga testirate. Ako znate Javu, Skalu ili Python, doslovno vam treba 5 minuta da probate najjednostavnije primere koje možete da pronađete na Apache Spark zvaničnom sajtu. Neki kažu da je Spark zamena za Hadoop, uskoro ćete imati priliku da pročitate moje mišljenje o tome na Startit.rs. Stoga neću dalje nastaviti o njemu, ali je sigurno da će Spark dobiti značajno mesto i na ovom blogu.

Kao što sam rekao, voleo bih da vidim i nova lica koja pišu za hadoop-srbija.com, tako da javite se i šaljite na mail sugestije. Imam u planu dosta tekstova i događaja. Nastavljamo da hadupujemo punom parom.

Unapređenja Hive 0.14 verzije

Od svog nastanka do danas, Hadoop je prolazio kroz veoma dinamičan razvoj. Danas je jedna od standardnih platformi za Big Data okruženje. Kroz taj razvoj veliki broj alata je nalazio svoju primenu u takvom okruženju i korišćen je za potrebe analiza i obrade podataka. Međutim, mnoštvo tih alata je i napuštalo ekosistem, ili njihova primena nije dobila na velikom značaju. Alat koji je našao standardnu primenu u Hadoop ekosistemu je Apache Hive.

Apache Hive predstavlja data warehouse alat za Hadoop. Omogućava upravljanje velikom količinom fajlova i analizom podataka koje ti fajlovi sadrže. U Hive je ugrađen “SQL like” upitni jezik, koji se naziva Hive Query Language, i koji omogućava manipulaciju podataka u Hadoop-u pisanjem upita koji su gotovo identični standardnim SQL upitima.

hive_logo

Na samom početku Hive se koristio za batch obrade podataka. Međutim, do danas je došlo do velikog razvoja ovog alata, i on definitivno više nije samo za batch obrade. Detaljnije o Hive-u možete pročitati u tekstu Hive, SQL za Big Data, a u ovom tekstu se bavimo značajnim unapređenjima koje je donela verzija 0.14 na polju transakcija i ACID svojstava.

Apache Hive 0.14 je dostupan od novembra 2014. i nastao je kao rezultat Stinger.next inicijative. Stinger.next predstavlja open source inicijativu koja kao primarni cilj ima unapređenje Apache Hive-a, i donošenje svih pogodnosti iz tradicionalnih Data Warehouse alata u Hadoop okruženje, odnosno omogućavanje Enterprise SQL-a u Hadoop okruženju. Veliki broj developera je dao svoj doprinos kroz ovaj open source projekat, uključujući i developere iz velikih kompanija kao što su Microsoft, Informatica, Tableau…

Cost Base Optimizer – CBO

Sa verzijom 0.14 stigao je i sofisticiraniji cost based optimizer, koji izrađuje plan upita u zavisnosti od statistike podataka. Time su omogućeni kompleksni join-ovi velikih fakt tabela. Na ovaj način je značajno ubrzano izvršavanje upita.

SQL Temporary Tabels

SQL privremene tabele postoje dok traje korisnikova sesija, a zatim nestaju. Omogućavaju korisnicima i BI alatima da čuvaju privremene rezultate, i dalje ih procesiraju kroz upite. U starijim verzijama Hive-a privremene tabele se nisu mogle koristiti.

Transakcije sa ACID svojstvima

Ovo unapređenje je najznačajnije u verziji 0.14. Omogućava modifikovanje podataka u tabelama korišćenjem standardnih SQL naredbi – Insert, Update i Delete. Za izmene se koriste lock-ovi nad tabelama. Uvođenjem ovih naredbi omogućene su korekcije fakt tabela i izmene dimenzionih tabela u data warehouse-u u Hadoop-u.

Pre nove verzije, Hive je korišćen kao write-once, read-often sistem, gde su korisnici koristili particije podataka, i često izvršavali upite nad tim podacima. Ova paradigma je napuštena, kako bi se omogućila analitika nad podacima koji se menjaju u vremenu i izveštavanje sa izmenjenim podacima i operativnim bazama. ACID predstavlja značajan iskorak na ovom polju, omogućivši SQL transakcije sa izmenama i brisanjem podataka iz tabela.

Kao rezultat je pored ACID transakcija omogućena i podrška SQL semantike, povećana je brzina izvršavanja upita i unapređeno skaliranje, i primena standardnog SQL-a i potpunijih izveštaja.

ACID i transakcije u Hive-u

ACID predstavlja akronim za četiri osobine transakcija nad bazom podataka:

  • Atomicity (atomnost) – operacija je ili skroz uspešna ili neuspešna, ne ostavlja parcijalne izmene i podatke.
  • Consistency (konzistentnost) – kada se jedna operacija završi, rezultat te operacije je vidljiv svakoj drugoj operaciji.
  • Isolation (izolovanost) – operacija jednog korisnika ne sme da ugrožava operaciju drugog korisnika.
  • Durability (trajnost) – kada se operacija završi, njen rezultat je trajan i očuvan i u slučaju otkaza mašine ili sistema.

Osnovni cilj Stinger.next inicijative je proširivanje broja scenarija korišćenja Hive-a za potrebe rešavanja problema velikih kompanija. Proširenja koja je donela verzija 0.14 se odnose na:

  • Izmene vrednosti kolona dimenzionih tabela. U tipičnoj star schemi data warehouse-a dimenzione tabele se polako menjaju u vremenu. Na primer, prodavac možda otvori novu radnju, pa je potrebno dodati je u tabelu. Ili je kupac promenio adresu stanovanja ili kontakt informacije, pa je i njih potrebno izmeniti. Hive sa ACID osobinama donosi mogućnost ovakvih izmena.
  • Prepravljanje podataka. U nekim slučajevima može doći do pogrešnog unosa nekih redova u tabeli, pa je te redove potrebno obrisati. Ili je istekao ugovor potpisan sa nekim od dobavljača, pa je tog dobavljača potrebno obrisati iz tabele. Verzije Hive-a pre 0.14 u ovakvim situacijama kao rešenje jedino omogućavaju kreiranje nove tabele, ili izostavljanje neispravno unetih redova iz svih narednih upita. Verzija 0.14 omogućava brisanje redova iz tabele standardnom SQL naredbom.

Osnovni dizajn

HDFS fajl sistem donosi ograničenja u vidu nemogućnosti direktne izmene fajlova, ili u nemogućnosti konzistentnog čitanja fajla koji se uređuje od strane nekog drugog korisnika. Kako bi bilo moguće omogućiti transakciona svojstva nad podacima koji su upisani u HDFS i koji su manipulisani Hive-om, praćeni su standardi koji se primenjuju i u tradicionalnim Data Warehouse alatima. Podaci koji se nalaze u tabeli čuvaju se u osnovnim fajlovima. Sve izmene, novi podaci ili obrisani podaci se čuvaju u delta fajlovima. Prilikom svake transakcije koja donosi neke izmene nad podacima u tabeli se kreiraju novi delta fajlovi. U vremenu čitanja podataka se izvršava merge osnovnih i delta fajlova, i na taj način se izvršavaju update-i u brisanje podataka. Kako bi bilo moguće izvršavanje ovih merge-ova, u Hive metastore su dodate niti koje utvrđuju kada je potrebno pokrenuti merge, i koje se izvršavaju u pozadini kako rad sa podacima ne bi bio usporen ili onemogućen. Nakon završetka svih procesa čitanja “starih” fajlova, brišu se svi stari fajlovi. Prilikom merge-ovanja fajlova pokreće se kompakcija fajlova. Primenjuju se dve vrste kompakcije fajlova – minor i major kompakcije. Minor kompakcije su one kod kojih dolazi do prepisivanja manjih delta fajlova u veće. Major kompakcije prepisuju sadržaj delta fajlova u osnovne fajlove.

Upravljanje lock-ovima

Za potrebe upravljanja lock-ovima implementiran je DBLockManager. Sve informacije o lock-ovima se čuvaju u metastore-u, kao i informacije o transakcijama. Ovakvom implementacijom je omogućena trajnost transakcija i lock-ova, čak i u slučaju da dođe do otkaza servera. U cilju sprečavanja scenarija u kome bi u slučaju otkaza nekog klijenta koji ima pokrenutu transakciju ta transakcija ostala kao nedovršena u metastore-u koristi se heartbeat pristup. Klijent koji je pokrenuo transakciju ili postavio lock šalje heartbeat signal ka metastore-u u redovnim intervalima. U slučaju otkaza klijenta, gubi se i heartbeat signal i lock ili transakcija se brišu.

Konfiguracioni parametri

U Hive verziji 0.14 transakcije, insert, update i delete naredbe nisu omogućene podrazumevanim podešavanjima. Kako bi bilo moguće primeniti ih, potrebno je izmeniti neka konfiguraciona podešavanja. Postoji nekoliko mogućnosti za unošenje konfiguracionih podešavanja koji se tiču izvršavanja Hive-a. Često korišćen pristup je unošenje podešavanja iz Hive komandne linije, unošenjem naredbi:

set parametar=vrednost_parametra;

Na primer:

set hive.exec.scratchdir=/tmp/mydir;

Pored ovog pristupa, izmene se mogu unositi i direktno u hive-site.xml fajl, koji predstavlja osnovni konfiguracioni fajl za Hive. Na primer:

<property>

<name>hive.exec.scratchdir</name>

<value>/tmp/mydir</value>

<description>Scratch space for Hive jobs</description>

</property>

 

Verzija 0.14 donosi i mogućnost izmene podešavanja koja su specifična za server na kome se Hive izvršava, ali ta podešavanja nisu od interesa za potrebe ovog teksta.

Potrebna podešavanja za izvršavanje Hive transakcija su:

Potrebna podešavanja za izvršavanje naredbi Insert, Update i Delete su:

Svojstva tabele

Kako bi tabelu bilo moguće koristi sa ACID osobinama, potrebno je podesiti svojstvo transactional nad tom tabelom. Bez ovog svojstva, biće omogućen samo unos podataka, a ne i izmene i brisanje. Svojstva tabele se unose ili prilikom kreiranja table, uz naredbu Create Table, ili prilikom alterovanja tabele, uz naredbu Alter Table.

Izmene u pisanju upita

Ovakva unapređenja su nužno dovela do promene sintakse samog Hive Query Language-a. Dodate su DML naredbe INSERT…VALUES, UPDATE i DELETE. U DDL su napravljene izmene koje se tiču prvenstveno transakcionih svojstva tabela. Dostupne su komande SHOW TRANSACTIONS i SHOW COMPACTIONS, koje se koriste za prikaz svih transakcija i kompakcija koje su aktivne. Naredba SHOW LOCKS sada pruža informacije i o novim lock-ovima koji su vezani za transakcije.

 

Deo opisanih funkcionalnosti možemo prikazati primerom. Pre pokretanja Hive komandne linije su napravljene navedene izmene u hive-site.xml fajlu.

Nakon unetih izmena potrebno je startovati Hive komandnu liniju (ili Hive editor koji dolazi uz Hue web interfejs ukoliko ga koristite. Pokrećemo sledeću skriptu koja kreira tabelu sa osnovnim podacima o zaposlenima u nekoj organizaciji:

 

create table zaposleni (id int, ime string, plata int, odeljenje string)

clustered by (odeljenje) into 3 buckets

stored as orc TBLPROPERTIES (‘transactional’=’true’) ;

 

Zatim u navedenu tabelu unosimo podatke o zaposlenima:

 

insert into table zaposleni values

(1, “Pera”, 75000, “A”),

(2, “Mika”, 80000, “A”),

(3, “Zika”, 76000, “B”),

(4, “Laza”, 92000, “C”);

 

Nakon unetih podataka želimo da zaposlenom sa id-jem 1 (Pera) povećamo platu:

 

update zaposleni set plata=83000 where id=1;

 

Uspešnost ažuriranja plate zaposlenog možemo proveriti pokretanjem naredbe:

 

select * from zaposleni

where id = 1;

 

čime će nam se ispisati ažurirana vrednost plate.

 

Takođe, iz ove tabele možemo izbrisati podatke o nekom zaposlenom koji je napustio firmu, pokretanjem naredbe:

 

delete from zaposleni where id=3;

 

Uspešnost prethodne naredbe možemo proveriti izlistavanjem svih podataka iz tabele o zaposlenima, gde ćemo primetiti da nedostaju podaci o obrisanom zaposlenom:

 

select * from zaposleni;

 

Ograničenja

Iako unapređenja verzijom 0.14 donose velike pogodnosti za rad sa transakcijama, postoje i neka ograničenja, koja će biti predmet budućih unapređenja i sledećih verzija. To su pre svega:

  • BEGIN, COMMIT i ROLLBACK još uvek nisu podržani, već se sve operacije automatski izvršavaju. Njihovo uvođenje se očekuje u sledećoj verziji.
  • Samo ORC format fajla je podržan. Integracija za ostale formate se očekuje u narednim verzijama.
  • Po podrazumevanim podešavanjima transakcije su isključene. Kako bi se mogle koristiti, potrebno je dodatno modifikovati podešavanja.
  • Tabele moraju imati bucketed svojstvo.
  • Podržana je samo izolovanost na nivou snapshot-a.

O svim unapređenjima koja su do sada došla u odnosu na Hive verziju 0.14, kao i o unapređenjima koja tek dolaze pisaćemo u nekim budućim tekstovima.

Hadoop i analitika u realnom vremenu

Razmišljao sam dugo o temi za ovaj post. Kao što ste i sami primetili, dugo nisam napisao nijedan tekst. Razlog nije što sam zaboravio ili što više ne želim da pišem, već sam radio kako bi blog obogatio novim tekstovima.

Poslednjih nekoliko nedelja pratim jedan odličan kurs o Apache Storm-u, kome ću posvetiti sledeći tekst na blogu. Da bismo se upustili u priču, prvo moram da ispričam neke interesantne podele analitike koje sam čuo na tom kursu, koje većina vas i zna, ali neka se nađe.

Neko moje razumevanje analitike je da je to, jednostavno rečeno, otkrivanje nekih paterna u podacima i njihovo predstavljanje na smislen način. Deli se na Cube Analytics i Predictive Analytics.

Ovde nema šta puno da se objašnjava, Cube Analytics je već dobro poznati OLAP, dok Predictive Analytics predstavlja korišćenje statistike i mašinskog učenja kako bi se došlo do nekih zaključaka.

Sledeće jesu dimenzije analitike, Batch i Real Time. Kako bih najbolje objasnio ova dva pojma, poslužiću se poređenjem brzine obrade:

Brzina manja od 500ms je karakteristična za OLAP/OLTP sisteme, dobar primer jesu transakcije u banci koje moraju da budu izvršene izuzetno brzo.

Brzina od nekoliko sekundi je karakteristična za Real Time Analitiku.

Ako je potrebno nekoliko minuta, sati ili dana da se odradi neka analiza, reč je o Batch obradi. Hadoop je primer ovakvog sistema.

Još jedna stvar koju bih dodao jeste da obradu u realnom vremenu možemo da podelimo u Streaming, gde se podaci obrađuju istog trena kada su i proizvedeni i Interactive, gde se radi sa već skladištenim podacima i rezultat posla ili query-ja se dobija odmah.

Sada da se vratimo Hadoop-u i pitanju da li Hadoop podržava obradu u realnom vremenu. Napisao sam gore da Hadoop koristi Batch obradu i to je tačno. Ukoliko posmatramo prvu generaciju Hadoop-a, to je potpuno tačno, a ako posmatramo drugu verziju koja je donela YARN, onda možemo reći da je Hadoop porastao i da sad može da se nosi i sa bržom obradom podataka.

Hadoop samo po sebi nije alat kojim možete da raditi obradu u realnom vremenu, ali ako pogledamo ceo ekosistem, može se napraviti takav sistem da je sposoban za obe stvari. Da se razumemo, ni Real Time nije nešto savršeno za sve situacije, to uvek zavisi od poslovnog problema koji treba rešiti. Na primer, nisam ni znao da kada se radi o RT obradi, ona ne mora uvek da vrati sve rezultate ili da oni budu potpuno tačni. U poslovanju se tolerišu čak i greške. Twitter za RT analizu koristi Storm, ali isto tako sve te podatke kasnije obradi Hadoop-om kako bi se ispravile eventualne greške.

Hadoop ekosistem je veliki i zaista ima mnogo alata, više vremena možete da utrošite u izbor nego u implementaciju. Ja ću pomenuti dve kombinacije koje sam probao. Prvo, ako želimo Streaming analizu, alat koji se odlično slaže sa Hadoop-om jeste Apache Storm. Storm može da koristi Hadoop kao izvor podataka ili kao destinaciju za čuvanje rezultata. Meni je nekako najlogičnije da Storm dizajniram tako da obrađuje podatke, ali da iste skladišti u Hadoop sirove. Razlog za ovo jeste odgovor na pitanje “Šta želim da analiziram?”. Zato ja mislim da ako imate problem koji je specifičan, prvo malo koristite Hadoop kako biste došli do nekih zaključaka. Na primer, dođete do zaključka, odnosno paterna prevare u bankarskom sektoru, pa posle lako možete da tražite taj patern u podacima u trenutku kada nastanu i da imate alarm za par sekundi. Na Internetu možete naći dosta pitanja na temu Hadoop vs Storm, ali ja smatram da treba razmišljati u pravcu Hadoop AND Storm. Ni jedan alat nije rešenje za sve probleme, pa tako i Hadoop ne treba uvek koristiti, a isto važi za Storm.

Drugu kombinaciju koju bih pomenuo jeste Hadoop i HBase. Ovo može biti kombinacija ako želite Interactive analizu. HBase je brz alat i koristi HDFS kao skladište. Odličan je ako želite da dobijete brzo rezultate. Ne želim puno u ovom delu da se zadržavam, priča je ista samo se podaci ne obrađuju u onom trenutku kada su i nastali. Ovde je isto bitno postaviti pitanje “Da li mi je ovo potrebno?” i “Da li je ovo najbolja kombinacija?”. Pisaću o Arhitekturi Big Data aplikacije, pa će biti više reči o ovom delu.

Storm i HBase su alati koje sam skoro počeo detaljnije da proučavam i zato sam ih pomenuo, ali daleko od toga da su jedini. Pored ovoga, u poslednje vreme dosta se priča o Apache Spark-u i Apache Flink-u, pa koga zanima može da pročita na Internetu više o njima.

Nadam se da je tekst od pomoći i da sam bar malo razjasnio tu dilemu o Hadoop-u u realnom vremenu. Sledeći tekstovi su sigurno Storm, Arhitektura Big Data aplikacije… Takođe, uskoro možete da očekujete tekst od mog kolege Miloša koji se predano bavi Hive-om i Pig-om i pisanjem aplikacija za iste. Ako imate pitanja ili želite da predložite temu pišite na mail, pa da zajedno hadupujemo!

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!