Apache Spark – organizacija podataka

Ćao svima. 🙂 Nedavno su u okviru naše meetup grupe održana dva predavanja o Apache Spark-u. Prvi meetup je bio fokusiran na teoriju o HDFS-u i Spark-u, i sve one funkcionalnosti koje ove alate čine značajnim za rad sa podacima. Prezentacija je dostupna na SlideShare-u. Na drugom meetup-u smo govorili detaljnije o Spark-u, i pokazali demo aplikacije na okruženju koje nam je obezbedio Databricks, pa im se ovom prilikom zahvaljujemo na ukazanom poverenju.

Šta je Apache Spark i kako početi sa njim možete pročitati u tekstu Apache Spark – Kako početi? U ovom tekstu ću se detaljnije pozabaviti osnovnim organizacionim jedinicama podataka u Spark-u, o kojima smo govorili na prethodnim okupljanjima.

Resilient Distributed Datasets

Osnovu Sparka čine Resilient Distributed Datasets, odnosno RDDs. RDD predstavlja osnovnu apstrakciju memorije u Spark-u, koja developerima omogućava izvršavanje računskih operacija nad podacima unutar velikih klastera koristeći njihovu memoriju, i pritom čuva fault tolerance svojstvo, poput MapReduce-a. Ukoliko neka od mašina u klasteru ne može da završi neki zadatak, ili ima nekih problema sa hardverom, samo deo posla koji je bio na toj mašini će se ponovo izvršiti na drugoj mašini, bez uticaja na zadatke koji se izvršavaju na mašinama koje pravilno funkcionišu. Predstavljaju particionisane kolekcije objekata rasprostranjene u klasteru, koje se čuvaju u memoriji ili na disku. Neka od osnovnih svojstava RDD-ova su:

  • Immutability – predstavljaju strukturu podataka koja se ne može izmeniti. Prilikom izvršavanja neke operacije nad RDD-ovima koja zahteva njihovu izmenu ili generisanje neke nove promenljive, dobija se novi RDD. Na taj način više RDD komponenti oslikava različite verzije seta podataka, pa se dobija “mutable” svojstvo.
  • Lineage – za svaki RDD se čuvaju podaci o tome kako je isti dobijen. Ukoliko tokom izvršavanja programa dođe do otkaza neke mašine u klasteru, RDD-ovi se mogu ponovo iskalkulisati od nule, a da to pritom ne utiče na RDD-ove koji se nalaze na ostalim mašinama. Omogućeno je da ukoliko dođe do gubitka podataka iz bilo kojih razloga tokom izvršavanja nekog programa, ti isti podaci se mogu ponovo efikasno iskalkulisati. Pored toga, lineage omogućava lazy evaluation Spark transformacija podataka.
  • Fault tolerance – omogućena je kroz logovanje svih izmena nad setom podataka, odnosno pojedinačnim izmenama koje se izvršavaju nad mnoštvom zapisa. Postiže se kroz lineage i Write Ahead logove (veoma značajni za Spark Streaming).

RDD se može kreirati učitavanjem podataka iz nekog storage sistema, poput HDFS-a ili nekog drugog, transformacijom nekog postojećeg RDD-a, ili pozivanjem funkcije parallelize nad nekom listom podataka u Python-u (ukoliko se koristi Python API za Spark, poznatiji kao PySpark).

Dva tipa RDD operacija je podržano:

  • Transformacije. Osnovna karakteristika transformacija je da su lazy evaluated, što znači da kada se pozove neka transformacija nad nekim RDD-om, ništa se ne dešava. Zapravo, program tada samo pamti šta je potrebno uraditi, a sama transformacija će se izvršiti tek kada na nju naiđe neka akcija. Izvršavanjem transformacije se dobija novi RDD. Neke od najčešćih korišćenih transformacija su map, filter i join.
  • Akcije. Akcija je u Spark-u operacija koja se izvšava odmah. Pozivanjem akcije se izvršavaju i sve transformacije nad podacima koje su prethodno pozvane. Predstavljaju mehanizam kojim se uzimaju podaci iz Spark-a. Najčešće korišćene akcije su collect, koja u terminalu vraća podatke koji se nalaze u RDD-u, i count, koja vraća broj redova u RDD-u nad kojim je pozvana. Akcije uvek imaju neki output za krajnjeg korisnika.

Često korišćena funkcija u Spark-u je cache(), koja čuva u memoriji RDD nad kojim je pozvana. Na taj način korisnik koji razvija program obezbeđuje da mu se neki podaci koje će kasnije koristiti čuvaju u memoriji, kako se ne bi morali ponovo učitavati sa diskova.

Dodatna literatura o RDD-ovima je dostupna u radu Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing sa Berkley Univerziteta, gde je Spark i razvijen.

Spark Dataframes

Dataframe predstavlja često korišćenu apstrakciju podataka u mnoštvu programskih jezika za rad sa podacima. Predstavljaju strukturu podataka poput tabele ili matrice, gde se u svakoj koloni čuvaju merenja neke varijable, a svaki red predstavlja jednu opservaciju, odnosno jedan zapis. U R jeziku predstavljaju jednu od osnovnih struktura podataka, a u Python-u se mogu koristiti kroz Pandas bibilioteku.

Spark Dataframe predstavlja distribuiranu kolekciju podataka koji su organizovani kao tabela ili matrica. Po nekim osnovnim karakteristikama su slični RDD-ovima, jer se takođe mogu čuvati u memoriji, i podržavaju lazy evaluation. Osnovna razlika između njih se ogleda u tome što Spark može optimizovati Dataframe operacije, jer svaki Dataframe sadrži metapodatke o tipovima podataka koji se nalaze u kolonama, što nije slučaj kod RDD-a.

Spark Dataframe se može kreirati na više načina, poput učitavanja strukturiranih fajlova sa podacima (poput CSV i JSON fajlova), iz eksternih baza, od postojeće Hive tabele (ukoliko se koristi u kombinaciji sa Hadoop-om), transformacijom RDD-a, … Korišćenjem dataframe-ova u Spark programu omogućene su sve “konvencionalne” operacije nad podacima koje bismo imali u nekoj relacionoj tabeli, kao što su sečenje tabele, sortiranje redova, agregacije, join sa drugim dataframe-ovima, …

Dataframe kao koncept postoji u Spark-u od verzije 1.3. Poput RDD-a, i Dataframe-ovi podržavaju lazy evaluation, čime se smanjuju stanja čekanja prilikom izvršavanja programa i omogućava bolji pipelining procesa. Za rad sa njima je moguće pisati DSL jezik u Java-i, Scala-i ili Python-u. Pored toga, njihovim uvođenjem omogućeno je pisanje SQL upita u Spark programu, koristeći klasu SQLContext. Veoma lako se mogu integrisati sa Pandas dataframe-ovima ukoliko se koristi PySpark, a na taj način i sa ostalim Python bibliotekama za rad sa podacima.

Benefiti koji su postižu korišćenjem Spark Dataframe-ova se odnose na poboljšanje performansi izvršavanja programa i fleksibilnost manipulacije podacima. Posbeno je značajna integracija sa Pipeline MLlib API-jem, što unapređuje performanse algoritama mašinskog učenja u Spark-u. PySpark je postao i ravnopravan igrač u korišćenju za Spark programe u odnosu na Scala-u i Java-u, što se najbolje oslikava benchmark testom sprovedenim od strane kompanije Databricks:

Dataset API

Za Spark 1.6 najavljen je novi API, pod nazivom Dataset API, koji predstavlja ekstenziju Dataframe API-ja, i kojim se garantuju još bolje performanse, ali za to nam preostaje da sačekamo da Spark 1.6 bude spreman za download i korišćenje.

Nedeljno prelistavanje, 20. decembar 2015.

Još jedna nedelja je za nama. Moram priznati da su me druge obaveze sprečile da više vremena izdvojim za lutanje Internetom u potrazi za novim i interesantnim tekstovima. Moguće da sam zbog toga propustio nešto interesantno, ali verujem da ću u narednom periodu “naleteti” na te stvari.

Sarcasm detection on Reddit comments – Ljudi se često ne razumeju najbolje u online komunikaciji. Prepoznati sarkazam i razumeti pravo značenje napisanog je priličan problem. PAKDD i Parrot Analytics organizuju interesantno takmičenje u detekciji sarkazma na popularnom Reddit-u. Nagrade nisu milionske, ali je problematika vrlo interesantna.

5 Data Science Leaders Share their Predictions for 2016 and Beyond – Vincent Granville, poznato ime u svetu Data Science-a, previđa neka interesantna dešavanja za 2016. godinu.

George Hotz is taking on Google and Tesla by himself – Opširna priča o čoveku čiji rad izaziva “na crtu” neke od najvećih svetskih kompanija. Da li je zaista moguće imati automobil koji sam sobom upravlja za 1000 dolara?

Deep Forger: Art Forgery Meets Deep Neural Nets – Ako ste se ikada pitali kako biste izgledali u očima Rembranta, Monea ili Van Goga, Deep Forger će vam dati odgovor. Lako i brzo – na Twitteru. Uz pomoć neuralnih mreža, naravno.

Nedeljno prelistavanje, 13. decembar 2015

Sigurno je da nismo originalni kada je u pitanju ovakav tip tekstova, ali nam se čini da je interesantno dati nekoliko predloga za čitanje iz mora dostupnih tekstova koji se mogu naći na mreži. Današnja lista je isključivo moj izbor, ali se nadam da ćemo za ubuduće naći još ljudi voljnih da podele sve interesantne stvari koje su imali prilike da pročitaju tokom radne nedelje.

Read more

Machine Learning algoritmi najmoćniji alat u industriji podataka

 

Jedna od strarijih industrijskih grana sigurno je drvna industrija. Svi znaju da je u drvnoj industriji jedan od osnovnih resursa drvo. Sirovo drvo ima određenu vrijednost ali obradom tog drveta, različitim alatima i kreativnim idejama stvaramo nove, veće vrijednosti, odnosno proizvode, koji nas okružuju i koji zadovoljavaju naše različite potrebe. Možda je malo neobično što ovaj tekst koji se odnosi na tehnologiju počinjem drvnom industrijom, ali želim sa ekonomskog aspekta povući paralelu između same ideje drvne industrije kao stare industrije i jedne nove industrije koja je na početku svoga brzog razvoja.
Upravo smo u eri eksponencijalnog porasta volumena i raznovrsnosti podataka koji se generiraju velikom brzinom i pristižu iz različitih izvora, kao što su senzori, društvene mreže, mobilni uređaji, transakcijski sistemi itd. Uz pomoć savremene tehnologije, svi naši aspekti života ulaze u proces „mjerenja“ i počinju da se kvantifikuju i izražavaju kroz različite digitalne podatke. Taj fenomen je već dobio svoje ime, Datafication. Svi ti podaci predstavljaju savremeni resurs. Resurs, kao što je to upravo i drvo. Sasvim je logično da se u posljednjih nekoliko godina počela razvijati nova industrija, industrija podataka. Koja je vrijednost podataka? Sirovi podaci, kao što je i sirovo drvo, nemaju neku veliku vrijednost, međutim, stavljanjem u funkciju ovih podataka imamo velike mogućnosti da stvaramo velike vrijednosti, često inovativne proizvode i usluge. Novu vrijednost možemo stvoriti samo njihovom obradom uz pomoć različitih alata, naprednih algoritama i kreativnih ideja. Još uvijek veliki broj preduzeća koja raspolažu sa podacima, čvrsto vjeruje da izvlače maksimalnu vrijednost iz podataka primjenom jednostavnih analitičkih postupaka a koji najčešće obuhvataju deskriptivne statističke metode koje izračunavaju procentne vrijednosti, prosjeke, učestalosti, odnosno, postavljanjem SQL upita nad bazama podataka. Naravno, primjenom i ovakvih metoda dobijemo određenu vrijednost, ali… Opet ću uzeti primjer drvne industrije. Kada koristimo sirovo drvo samo za toplotnu energiju (drva za loženje), to nam daje određenu vrijednost, mada minimalnu, nego kada bismo tu istu količinu drva obradili nekom naprednom metodom i kreativnom idejom, tada bi dobili proizvod sa nekim inovativnim dimenzijama koji ima dosta veću vrijednost. Upravo su u industriji podataka naprednije metode algoritmi strojnog učenja (engl. Machine Learning) koji nam pružaju beskrajne mogućnosti da stvaramo nova tehnološka rješenja koja pokreću podaci. Sve je veće prisustvo takvih rješenja a kao najveći korisnici strojnog učenja su tehnološki giganti poput Amazon-a, Google-a i sl. Amazon veliku vrijednost generira kroz Machine Learning algoritme koji automatizovano podešavaju cijenu proizvoda svaki put kada pregledate proizvode, te tako postižu cjenovnu optimizaciju. Odnosno, algoritam postavlja cijene na način da maksimizira profit po prodaji svakog proizvoda. Takav algoritam donosi odluke u stvarnom vremenu i mudriji je nego što mislimo. Koliku vrijednost Machine Learning algoritmi pružaju Amazon-u, a koliko bi pružili neki drugi analitički pristupi? Možemo slobodno reći da klasična poslovna inteligencija ide prema umjetnoj poslovnoj inteligenciji kao svome vrhuncu. Industrija podataka će proizvoditi nova rješenja zasnovana na Machine Learning tehnologiji koja pokreću podaci.

Hadoop Srbija postaje Data Science zajednica Srbije

Tačno 25. marta 2014. godine napisao sam prvi tekst za blog Hadoop Srbija koji sam pokrenuo nekoliko dana pre toga. Cilj mi je bio da prenesem znanje koje sam imao o Hadoop-u i Big Data tehnologijama. Na početku sam krenuo sam, nešto kasnije mi se priključila Aleksandra koja je vodila računa o društvenim mrežama i bila kritičar mojih tekstova, kao neko ko se ne bavi ovim tehnologijama. Tekst po tekst, sve više ljudi je čitalo moj blog i mnogo njih mi se javilo. Nako toga timu su se priključili Jelena i Miloš koji su mnogo doprineli samom razvoju bloga. Sad je došlo vreme da blog raste i da se priključe novi ljudi, da postane zajednica koja će dalje graditi svest o podacima, tehnologijama i nauci o podacima.

Zašto datascience.rs ?

Počeo sam da pišem samo o Hadoop-u i alatima koji se dodaju na njega, ali vremenom, kako sam učio, tu su se pojavili novi alati i postalo mi je jasno da pišemo mnogo šire nego što je Hadoop Srbija. Pored toga, upoznao sam Branka i Zorana koji su bili voljni da postavimo temelje zajednice. Branko je već imao domen i mogli smo da počnemo. Na jednom sastanku Miloš, Zoran, Branko i ja smo doneli odluku da napravimo sajt datascience.rs i počnemo.

Meetup grupa

Pored sajta, tu je i meetup grupa. Zoran je u avgustu pokrenuo ovu grupu gde smo se kasnije priključili kao organizatori i sada je grupa jedna od aktivnosti Data Science zajednice Srbije. Trudićemo se da organizujemo što više kvalitetnih meetup-a i druženja.

Konferencija

U Srbiji je u oktobru održana i prva Data Science konferencija u našoj zemlji, koju je organizovao Institut savremenih nauka, a gde je Branko bio jedna od organizatora. Kvalitet predavanja, kompanije koje su se pojavile i podržale konferenciju i velika posećenost dodatno su nas ohrabrili da nastavimo da radimo. Takođe, tu je i podrška od organizacionog tima, divne ekipe, kojoj želim da se i na ovaj način zahvalim i čestitam na uspešnoj konferenciji.

Hadoop Srbija domen će biti preusmeren na novu lokaciju. Tu je stara ekipa i još novih ljudi koji će deliti svoja iskustva. Svi zainteresovani da pišu i podele svoja iskustva mogu nan se javiti. Ovo će biti mesto za sve nas koji radimo sa podacima.

Na kraju želim da se zahvalim i drugim IT zajednicama u Srbiji koje nas podržavaju. Uživajte u novom blogu i ovim putem vas pozivam da dođete da se družimo na nekom od meetup-a.