Big Data. Grubo rečeno, ovaj pojam predstavlja grupu tehnologija koje se koriste za prikupljanje, skladištenje, upravljanje i obradu podataka kada tradicionalne metode ne uspeju. Brz tehnološki razvoj doveo je do eksplozije količine podataka koje stvaramo u svakodnevnim aktivnostima koristeći razne smart uređaje, društvene mreže, itd. Trenutna procena je da postoji oko 8 zetabajta podataka u digitalnom formatu. Takođe se procenjuje da u roku od dva dana globalno stvaramo onoliko podataka koliko je stvoreno do 2000. godine. Zato nije nikakvo iznenađenje što je koncept BigData još uvek nejasan i da zahteva kontinuiranu evoluciju i redefinisanje. Glavni zadatak Big Data je da odgovori na pitanje šta bi trebalo uraditi sa svim tim podacima. Na koji način bi ih trebalo skladištiti i obraditi na najefikasniji i najbrži način sa namerom da se dođe do najznačajnijih zaključaka? Kako bismo ovu objavu zadržali konciznom, govorićemo o obradi podataka, usredsređujući se na najvažnija iskustva koja smo imali u ovoj oblasti. Zajedno sa pojmovima „Mašinsko učenje“ i „AI“ (veštačka inteligencija), Big Data je jedan od najpoluparnijih pojmova u IT svetu. Primene ovih oblasti mogu se naći u skoro svim tipovima industrija, i tu postoje brojni izazovi. Postoji velika konkurencija na tržištu u obliku raznih rešenja koja odgovaraju na izazove koji prate Big Data i često je slučaj da ono što se do juče smatralo standardom iznenada postane zastarelo. U poslednje vreme, MapReduce se često spominje u tom kontekstu u IT krugovima. MapReduce se nalazi u samom srcu Hadoop-a i odgovoran je za obradu podataka koji su skladišteni u okviru HDFS. Sa razvojem Big Data tehnologija, pojavila su se nova rešenja koja se koriste za obradu, i Apache Spark se pojavio kao jedan od glavnih konkurenata u ovoj grupi. Ova objava je napisana kao pokušaj da se odgovori na naslovno pitanje oslanjajući se na BigData okruženja koja koristimo u našim slučajevima. Pre nego što ih uporedimo, hajde da se najpre upoznamo sa fundamentalnim konceptima u vezi sa obe tehnologije, koje su od ključne važnosti za svako dalje razmatranje.
MapReduce
MapReduce je programski model koji omogućuje paralelnu i raspoređenu obradu podataka koji se skladište u HDFS. Kao što njegov naziv to sugeriše, ovaj programski model sastoji se iz dve logičke jedinice, Map (mapa) i Reduce (umanjivanje), pri čemu se najpre sprovodi Map faza, a njen rezultat predstavlja ulazne podatke Reduce faze. Map faza je prva faza obrade i savetuje se da se upravo u njoj sprovede najsloženiji deo obrade. Map faza transformiše niz ulaznih podataka u (ključ, vrednost) parove na osnovu pisanog koda. Nju odmah prati korak koji obuhvata proces razmeštanja i sortiranja u kom se grupisanje svih vrednosti vrši prema ključevima i taj rezultat se prenosi u Reduce fazu. Pošto Reduce faza sadrži sve ključeve i njihove povezane vrednosti kao ulazne podatke, preporučuje se da se u ovoj fazi vrši znatno jednostavnija obrada, poput sabiranja i grupisanja.
Glavna prednost MapReduce-a odražava se u paralelnoj obradi podataka. Zapravo, celokupna aktivnost obrade MapReduce-a podeljenja je na datanode-ove BigData okruženja, koji istovremeno vrše obradu dela podataka koji su im dodeljeni. Ova metoda značajno umanjuje vreme utrošeno na obradu, sprečava preopterećenje određenih mašina u BigData okruženju i umanjuje troškove. Sa druge strane, pošto se MapReduce oslanja na podatke od HDFS-a, on mora da pročita podatke i zapiše ih na disku, što značajno uvećava vreme namenjeno za obradu i efikasno onemogućava obradu podataka u realnom vremenu. Takođe, uzimajući u obzir mali broj podržanih biblioteka i funkcionalnosti, MapReduce je praktično predodređen za operacije koje nisu toliko kompleksne, npr. sabiranje i grupisanje.
Spark
Apache Spark je okvir sa otvorenim kodom za obradu velikih količina podataka. U skladu sa svojim imenom i funkcionalnostima, u Big Data krugovima on je takođe poznat kao munjevito brzo klaster računarstvo. To je najpopularniji i najaktivniji Apache projekat za obradu podataka. Napisan je u programskom jeziku Skala, uz omogućavanje API za programske jezike Python, Scala, Java, R i SQL. Spark vrši njegovo sprovođenje na distribuiran način zahvaljujući svom ključnom procesu koji deli aplikaciju na nekoliko zadataka i raspoređuje ih u procese izvršioca, čiji se resursi mogu lako skalirati u zavisnosti od potreba aplikacije. Pojam RDD (Resilient Distributed Datasets – otporni raspoređeni nizovi podataka) leži u srcu obrade podataka pomoću Spark-a i predstavlja neizmenljiv skup objekata na kojima se paralelno mogu primeniti razne operacije. Ove operacije se takođe mogu rasporediti na nivou klastera i izvršiti u okviru paralelne grupne obrade, što vodi do brze i efikasne paralelne obrade. Takođe, od samog početka, Spark je optimizovan da vrši obradu unutar memorije, što opravdava njegov nadimak munjevito brzog klaster računarstva. To je izuzetno fleksibilna i jednostavna alatka koja omogućava obradu protoka, alatke za mašinsko učenje, SQL upite, razvoj grafičkih algoritama, kao i programski model MapReduce.
MapReduce vs Spark
Kako bih našao/la odgovor na naslovno pitanje, odlučio/la sam sprovedem jednostavno ali efikasno testiranje. Big Data okruženje od 13 mašina korišćeno je za potrebe tog testiranja, od kojih 11 mašina ima ulogu datanode-ova, svaki sa po 64GB RAM-a i 16-jezgarnim procesorima sa ukupnom memorijom od 30TB. MapReduce poslovi su već implementirani u ovom okruženju i uglavnom su vršili osnovne statističke operacije poput avg (prosek), min (minimum), max (maksimum), itd. i grupisanje podataka. Stoga, prvi korak testiranja bila je primena svih postojećih MapReduce poslova preko Spark aplikacija. Python je korišćen za potrebe MapReduce poslova koji su se isticali kao logično rešenje u vreme njihove implementacije. Stoga, za potrebe testiranja kvaliteta, odlučeno je da se koristi pyspark za pisanje novih aplikacija, odnosno Python API u okviru Apache Spark.
Prva stvar koja se mogla primetiti tokom testiranja bila je veća fleksibilnost Spark-a u poređenju sa MapReduce što se tiče izbora programskog jezika. Iako u teoriji postoje neke druge opcije, u praksi se izbor programskog jezika obično svodi na JAVA ili Python u okviru Hadoop MapReduce obrade. Spark je ovde znatno fleksibilniiji jer nudi mogućnost izbora između Python, JAVA, Scala, R i SQL jezika, u zavisnosti od potreba i veština programera. Takođe, tokom implementacije kodova u okviru Spark tehnologije, primećeno je da su kodovi znatno koncizniji i efikasniji u poređenju sa Hadoop MapReduce. Razlog za to je činjenica da Spark koristi RDD koji omogućava operatere visokog nivoa, dok svaka zahtevna operacija mora biti kodirana tokom MapReduce obrade, što dalje komplikuje situaciju. Značaj ove Spark funkcije takođe je potvrđen činjenicom da je u okviru testiranja postojala instanca u kojoj je 50 linija koda u okviru jedne MapReduce obrade smanjeno na 8 linija koda u okviru Spark obrade. Takođe, za zakazivanje svih poslova, Hadoop MapReduce koristi dodatnu komponentu Oozie, dok Spark deluje kao sopstveni planer usled mogućnosti obrade u okviru memorije sa nasumičnim pristupom.
Nakon što su ovi poslovi implementirani tako da postoje u okviru obe tehnologije, prešli smo na sledeću fazu testiranja, odnosno poređenje performansi obrada podataka. Prva poređenja izvršena su za male datoteke veličine do 5GB. U tim slučajevima, Spark je bio do 15 puta drži u odnosu na MapReduce. Takođe, Spark je zahtevao više mašinskih resursa BigData klastera u odnosu na MapReduce; ova razlika nije imala odlučujuće dejstvo na rad čitavog okruženja. Testiranje je zatim nastavljeno korišćenjem većih datoteka od 10GB, 15GB, itd. Rezultati ovih testova zapravo su bili slični prethodnim, pri čemu je, kao što je očekivano, Spark zahtevao sve više i više resursa od Big Data okruženja. Međutim, okruženje je i dalje radilo kao i obično sa nešto većim opterećenjem. Sledeći korak bio je da se koriste znatno veće datoteke, počevši od datoteke od 100GB. Došlo je do promene u ovom delu testiranja. Kao što je očekivano, Spark je zahtevao sve više i više resursa od Big Data okruženja do trenutka kada su ti zahtevi počeli da utiču na rad okruženja, i čak izazivaju kvarove određenih mašina usled preopterećenja. Takođe, usled opterećenja okruženja, Spark nije čak mogao ni da završi neke poslove, dok je MapReduce uspešno završio sva ponavljanja testova. Naravno, po cenu vremena utrošenog na samu obradu. Tokom MapReduce obrade, klaster nije radio na najoptimalniji način tokom konačnih ponavljanja testova sa velikim datotekama, ali ti problemi su bili znatno manji i nisu izazvali kvarove određenih datanode-ova i svi poslovi su završeni.
Zaključak
Opšta preporuka je da se da prednost Hadoop MapReduce-u za linearnu obradu velikih količina podataka, pre svega usled uštede energije. Apache Spark je bolji izbor kada se zahteva da se izvrši obrada u skoro realnom vremenu, za potrebe mašinskog učenja, napredne analitike, itd. Ako troškovi nisu ograničavajući faktor za razvoj Big Data okruženja, Apache Spark može u potpunosti da zameni Hadoop MapReduce metodu obrade i pruži znatno više funkcionalnosti.
Ne postoji jedinstven odgovor na pitanje koji bi okvir za obradu trebalo izabrati. Svaki slučaj upotrebe ima jedinstvene potrebe i ograničenja i, u skladu sa ovim, neophodno je izabrati najpogodnije rešenje za taj konkretni slučaj upotrebe. Takođe, ne postoji jedinstven odgovor na naslovno pitanje. U nekim okruženjima, Spark bi bio idealno rešenje, dok je naš test pokazao da, iako je Spark suštinski snažnija alatka, kod linearne obrade velike količine podataka, MapReduce je definitivno bolji izbor.