Podaci su zlato — šta je big data, šta su Hadoop i Spark, i kako krenuti sa njima?

Donosimo vam uvod u big data kao koncept i u dve tehnologije koje se koriste u takvim projektima. Od Darka Marjanovića na Startitu:

Darko Marjanović - 7. Jul, 2015.

Big Data je termin koji je aktuelan poslednjih godina u svetu. Pre nešto više od dve godine sam čuo za Hadoop i od tada sam u ovom svetu. Svi moji projekti u vezi sa nekim od Big Data tehnologija i rado pišem na ovu temu na blogu Hadoop Srbija.

Nekoliko reči o Big Data

Neko bi rekao da se pod ovim terminom podrazumevaju velike količine podataka, neko veliki podaci, i sve je to tačno, ali po mom mišljenu je nedovoljno. Uvek se vodim time da je Big Data samo jedan izraz koji koristimo za podatke:

Izuzetno je bitno voditi računa o kvalitetu tih podataka.

IT je u usponu, razvile su se tehnologije koje su u mogućnosti da odgovore na Big Data zahteve, i kada na to dodamo kompanije poput Google-a, Facebook-a i sličnih, imamo odličan teren za razvoj ove oblasti.

Društvene mreže, pametni uređaji, logovi, slike, video… Spisak je dugačak, sve su ovo izvori podataka, koje ako želimo da sakupljamo, dobijamo Big Data gotovo sigurno. Iako tehnički nepotpuno, često volim da kažem da je Big Data sve ono što ne može da stane u Excel.

Hadoop

Jedna od tehnologija koja je gotovo sigurno postala standard i koja se najčešće vezuje za Big Data jeste Hadoop. Ukratko rečeno, Hadoop je open-source framework Apache fondacije. Služi za skladištenje i procesiranje velikih količina podataka. Hadoop je nastao još 2005. godine, baziran na radovima koda koji je objavio Google.

Napisan je u programskom jeziku Java, ali Hadoop programeri ne moraju nužno da budu Java orijentisani, već mogu koristiti gotovo bilo koji programski jezik. Dizajniran je tako da radi na commodity hardveru, odnosno na jeftinim hardverskim resursima.

Kada je reč o Hadoopu, a i kasnije zbog upoređivanja sa Sparkom, bitno je shvatiti da se on sastoji iz četiri dela.

Podaci se čuvaju u formi blokova i kopirani su u tri kopije kroz klaster, tako da ako dođe do otkaza neke mašine, postoji kopija na još dve.

Osim ove četiri komponente Hadoop se oslanja na svoj ekosistem, odnosno na specijalizovane alate za prikupljanje podataka (Flume, Kafka, Sqoop), procesiranje podataka (Pig, Hive, Storm…), upravljanje (Ambari, Falcon…).

Sve navedeno je skup koji čini jednu Big Data aplikaciju, koja u zavisnosti od slučaja do slučaja koristi neke od ovih alata. Ono što sam iz iskustva naučio jeste da jednu kvalitetnu Big Data aplikaciju nikako ne čini jedna tehnologija, i da je najbolje iskoristiti maksimum svake.

Apache Spark

Pored Hadoopa, javila se još jedna tehnologija koja je zvanično najpopularnija Big Data tehnologija u poslednjih godinu dana. Apache Spark je platforma za obradu podataka, sa dodatnim modulima za mašinsko učenje, sql, streaming i graf obradu. Takođe, spada u one alate koji obradu vrše u radnoj memoriji, što znači da je Spark jako brz. Čak i ako imate npr. 300GB podataka, a samo 100GB RAMa, Spark podatke koji ne mogu da stanu u memoriju premešta na disk, što dovodi do malo sporije obrade, ali definitivno brže nego da je samo na disku.

Neki koncepti koji krase Spark su:

Operacije koje mogu da budu transformacije (Map, Filter, GroupBy…) i akcije (count, collect, save…). Transformacije su lazy, što znači da se izvršavaju tek kada se pozove neka akcija. Preporučio bih da pogledate sledeći link.koji odlično ilustruje Spark operacije.

Što se tiče razvoja Spark aplikacija, lista programskih jezika je manja nego Hadoop lista, ali je mnogo jednostavnije pisati Spark aplikacije. Ovo govorim iz sopstvenog iskustva. Python, Scala, Java i od skoro R su jezici u kojima možete da pišete Spark programe. Spark je napisan u Scala-i i definitivno preporučujem pisanje u ovom jeziku ako želite maksimum u brzini, isto tako, Python je odličan, ali je API za nijansu siromašniji.

Spark će zameniti Hadoop

Jedno od pitanja koje se postavlja jeste da li je Spark zamena za Hadoop. Hadoopom se bavim više od dve godine, a Sparkom poslednjih šest meseci i mogu da kažem da Spark nije zamena za Hadoop. Zašto? Spark nema svoje skladište podataka i dosta se oslanja na HDFS, može da koristi i izvore poput s3, Cassandra, Taychone… Najčešće koristi HDFS. Ako posmatramo načine rada Spark-a, koji mogu biti “standalone” ili klaster, ovaj drugi zahteva neki “shared file system”, što opet kažem ne mora da bude Hadoop HDFS, ali je najčešće.

Pored toga, svi vodeću distributeri Hadoopa su u svoju platformu uvrstili i Spark. Ono sa čim Spark može da se uporedi jeste MapReduce, definitivno je brži, mogo je bolji u algoritmima za koje je potrebno više iteracija, bolji je za mašinsko učenje. Kako bismo u Things Solveru proverili to da je Spark brži, podigli smo jedan Hadoop klaster od pet mašina koje su zajedno imale 60GB RAM-a. Na to smo instalirali Spark na YARNu.

Testirali smo senzorske podatke, koji su sadržali podatke o temperaturi, vlažnosti vazduha… Hteli smo da odradimo samo osnovnu deskriptivnu statistiku za temperaturu. Prvo je odrađen test sa Hive-om, za koje je bilo potrebno i pripremiti podatke. Zatim je to isto odrađeno u Sparku (Scala) i Sparku (Python). Rezultati su bili sledeći

Napomena: Hive je radio u MapReduce režimu i nisu rađena dodatna podešavanja. Definitivno Spark je brži. Težinu razvoja u ovom slučaju ne bih komentarisao, ali bih dodato jednu prednost Sparka, a to je da je moguće da razvijete alikaciju na svom računaru i da tu istu aplikaciju samo pokrenete u produkciji bez nekog dodatnog podešavanja, dok je takav razvoj sa Hadoopom teško izvodljiv.

Ono što bih izdovojio kao mane Sparka ili trenutne nedostatke:

Za kraj, smatram da Spark ne može da se poredi sa Hadoopom, već samo sa MapReduceom. Ove dve tehnologije zajedno daju mnogo bolje rezultate nego pojedinačno. Ako nekog više zanima Hadoop ili Spark, može slobodno da mi se javi rado ću pomoći koliko mogu. Uvek me možete naći na Hadoop Srbija.

***

Definitivno je da je tek početak Big Data projekata i da će Hadoop i Spark biti dugo primenjivani u implementaciji Big Data rešenja. Ušli smo u eru gde su podaci zlato i smatram da bi učenje ovakvih alata samo doprinelo većem razvoju informacionih tehnologija u Srbiji. Banke, marketinške agencije, zdravstvene ustanove, fabrike samo su početak liste potencijalnih korisnika Big Data aplikacija. Čak i mala preduzeća koja žele da uspeju treba da teže ka prikupljanju i obradi podataka koji ih okružuju. Mogu slobodno reći da za početak nije potrebno ni ogromno iskustvo u programiranju.

Neki od resursa koje bih preporučio za početak su: