Oluja ili iskra: odaberite svoje oružje u stvarnom vremenu

Ideja poslovne inteligencije u stvarnom vremenu postoji već neko vrijeme (vidi stranicu Wikipedije o temi započetoj 2006. godine). No, iako ljudi godinama govore o toj ideji, nisam vidio da mnoga poduzeća zapravo prihvaćaju viziju, a još manje shvaćaju prednosti koje ona omogućuje.

Barem je dio razloga nedostatak alata za implementaciju BI-a i analitike u stvarnom vremenu. Tradicionalna okruženja za skladištenje podataka bila su jako orijentirana na serijske operacije s izuzetno velikim kašnjenjima, bila su nevjerojatno skupa ili oboje.

Pojavio se niz moćnih, jednostavnih platformi otvorenog koda koje su to promijenile. Dvije najistaknutije su Apache Storm i Apache Spark, koje nude mogućnosti obrade u stvarnom vremenu mnogo širem krugu potencijalnih korisnika. Oba su projekta unutar Apache Software Foundation, a iako dva alata pružaju preklapajuće mogućnosti, svaki od njih ima prepoznatljive značajke i uloge.

Oluja: Hadoop obrade u stvarnom vremenu

Storm, distribuirani računski okvir za obradu toka događaja, započeo je život kao projekt BackType-a, marketinške obavještajne tvrtke koju je Twitter kupio 2011. Twitter je ubrzo otvorio projekt i stavio ga na GitHub, ali Storm je na kraju prešao u Apache Incubator i postao je Apacheov projekt najviše razine u rujnu 2014.

Oluja se ponekad naziva Hadoopom obrade u stvarnom vremenu. Čini se da se dokumentacija Storma slaže: "Storm olakšava pouzdanu obradu neograničenih tokova podataka, čineći za stvarnu obradu ono što je Hadoop učinio za serijsku obradu."

Da bi postigao taj cilj, Storm je dizajniran za masivnu skalabilnost, podržava toleranciju kvarova s ​​pristupom procesima "brzo neuspješno, automatsko ponovno pokretanje" i nudi snažno jamstvo da će svaka torta biti obrađena. Storm prema zadanim postavkama jamči "barem jednom" za poruke, ali nudi mogućnost implementacije i obrade "točno jednom".

Storm je napisan prvenstveno na Clojureu i dizajniran je da podrži "izljeve" ožičenja (mislite na ulazne tokove) i "vijke" (moduli za obradu i izlaz) u obliku usmjerenog acikličkog grafa (DAG) koji se naziva topologija. Topologije Storm izvode se na klasterima, a planer Storm distribuira rad čvorovima oko klastera, na temelju konfiguracije topologije.

Možete smatrati da su topologije približno analogne zadatku MapReduce u Hadoopu, osim one s obzirom na to da se Storm usredotočio na obradu temeljenu na stream-u, topologije zadane da rade zauvijek ili dok se ručno ne prekinu. Jednom kada se započne topologija, izljevi unose podatke u sustav i predaju ih na vijke (što zauzvrat može podatke predati na slijedeće vijke) gdje se obavlja glavni računski posao. Kako obrada napreduje, jedan ili više vijaka mogu zapisati podatke u bazu podataka ili datotečni sustav, poslati poruku drugom vanjskom sustavu ili na drugi način učiniti rezultate računa dostupnim korisnicima.

Jedna od snaga ekosustava Storm je bogata lepeza dostupnih izljeva specijaliziranih za primanje podataka iz svih vrsta izvora. Iako ćete možda morati pisati prilagođene izljeve za visoko specijalizirane aplikacije, postoji velika šansa da ćete pronaći postojeći izljev za nevjerojatno veliku raznolikost izvora - od Twitter streaming API-ja preko Apache Kafke do JMS brokera do svega između.

Adapteri postoje kako bi olakšali integraciju s HDFS sustavima datoteka, što znači da Storm može lako surađivati ​​s Hadoop-om ako je potrebno. Još jedna snaga Storma je podrška za višejezično programiranje. Iako se sama Storm temelji na Clojureu i radi na JVM-u, izljevi i vijci mogu se pisati na gotovo bilo kojem jeziku, uključujući jezike koji nisu JVM koji koriste prednost protokola za komunikaciju između komponenata pomoću JSON-a preko stdin / stdout.

Ukratko, Storm je vrlo skalabilan, brz, otporan na pogreške tolerantan sustav za distribuirano računanje, s posebnim naglaskom na obradu toka. Storm se ističe u obradi događaja i inkrementalnom izračunavanju, izračunavajući valjanje mjernih podataka u stvarnom vremenu preko tokova podataka. Iako Storm također nudi primitive koji omogućavaju generički distribuirani RPC i teoretski se mogu koristiti za sastavljanje gotovo bilo kojeg posla distribuiranog računanja, njegova je snaga očito obrada toka događaja.

Iskra: Distribuirana obrada za sve

Spark, još jedan projekt pogodan za distribuirano računanje u stvarnom vremenu, započeo je kao projekt AMPLaba na Sveučilištu Kalifornija u Berkeleyu prije nego što se pridružio Apache Incubatoru i na kraju diplomirao kao projekt najviše razine u veljači 2014. Poput Oluje, Spark podržava stream orijentirana obrada, ali to je više distribuirana računalna platforma opće namjene.

Kao takav, Spark se može smatrati potencijalnom zamjenom za funkcije MapReduce Hadoopa, dok Spark ima mogućnost pokretanja na postojećem Hadoop klasteru, oslanjajući se na YARN za planiranje resursa. Uz Hadoop YARN, Spark se može slojiti na vrh Mesosa radi raspoređivanja ili se pokretati kao samostalni klaster pomoću svog ugrađenog planera. Imajte na umu da ako se Spark ne koristi s Hadoop-om, neka vrsta mrežnog / distribuiranog datotečnog sustava (NFS, AFS i tako dalje) i dalje je potrebna ako se izvodi na klasteru, tako da će svaki čvor imati pristup temeljnim podacima.

Spark je napisan na Scali i, poput Storma, podržava višejezično programiranje, iako Spark pruža specifičnu API podršku samo za Scala, Java i Python. Spark nema specifičnu apstrakciju "izljeva", ali uključuje adaptere za rad s podacima pohranjenim u brojnim različitim izvorima, uključujući HDFS datoteke, Cassandru, HBase i S3.

Tamo gdje Spark blista je podrška za višestruke paradigme obrade i prateće knjižnice. Da, Spark podržava streaming model, ali tu podršku pruža samo jedan od nekoliko Spark modula, uključujući namjenski ugrađene module za pristup SQL-u, operacije grafova i strojno učenje, uz obradu toka.

Spark također nudi izuzetno praktičnu interaktivnu ljusku koja omogućuje brze i prljave izrade prototipa i istraživačku analizu podataka u stvarnom vremenu pomoću Scala ili Python API-ja. Radeći u interaktivnoj ljusci, brzo primijetite još jednu veliku razliku između Sparka i Storma: Spark ima više „funkcionalnog“ okusa, gdje se rad s API-jem više pokreće lancem uzastopnih poziva metoda za pozivanje primitivnih operacija - za razliku od Model Storm, koji se obično pokreće stvaranjem klasa i implementacijom sučelja. Ni jedan ni drugi pristup nisu bolji ili gori, ali stil koji preferirate može utjecati na vašu odluku o tome koji sustav bolje odgovara vašim potrebama.

Poput Storma, Spark je dizajniran za veliku skalabilnost, a Spark tim dokumentirao je korisnike sustava koji pokreće proizvodne klastere s tisućama čvorova. Uz to, Spark je pobijedio na nedavnom natjecanju Daytona GraySort 2014. godine, okrenuvši se u najbolje vrijeme za opterećenje koje se sastoji od sortiranja 100TB podataka. Spark tim također dokumentira Spark ETL operacije s produkcijskim opterećenjima u višestrukom rasponu Petabyte.

Spark je brza, skalabilna i fleksibilna distribuirana računalna platforma otvorenog koda, kompatibilna s Hadoop-om i Mesos-om, koja podržava nekoliko računalnih modela, uključujući streaming, operacije usmjerene na grafove, pristup SQL-u i distribuirano strojno učenje. Spark je dokumentiran da se izuzetno dobro skalira, i poput Storma izvrsna je platforma na kojoj se može graditi analitika i sustav poslovne inteligencije u stvarnom vremenu.

Donošenje odluke

Kako birati između Oluje i Iskre?

Ako su vaši zahtjevi prvenstveno usmjereni na stream obradu i obradu u stilu CEP-a i započinjete greenfield projekt s namjenski izgrađenim klasterom za projekt, vjerojatno bih favorizirao Storm - pogotovo kada su dostupni postojeći Storm izljevi koji odgovaraju vašim zahtjevima integracije . To nikako nije čvrsto i brzo pravilo, ali takvi bi čimbenici barem predložili početak Oluje.

S druge strane, ako koristite postojeći klaster Hadoop ili Mesos i / ili ako vaše potrebe za obradom uključuju značajne zahtjeve za obradu grafova, SQL pristup ili skupnu obradu, prvo biste trebali pogledati Spark.

Drugi čimbenik koji treba razmotriti je višejezična podrška dvaju sustava. Na primjer, ako trebate koristiti kod napisan na R ili bilo kojem drugom jeziku koji Spark izvorno ne podržava, tada Storm ima prednost šire jezične podrške. Prema istom principu, ako morate imati interaktivnu ljusku za istraživanje podataka pomoću API poziva, tada vam Spark nudi značajku koju Storm nema.

Na kraju ćete vjerojatno htjeti izvršiti detaljnu analizu obje platforme prije konačne odluke. Preporučujem korištenje obje platforme za izradu malog dokaza o konceptu - zatim pokrenite vlastite mjerila s radnim opterećenjem koje odražava vaša očekivana radna opterećenja što je bliže moguće prije nego što se u potpunosti posvetite bilo kojem.

Naravno, ne trebate donijeti odluku ili / ili. Ovisno o vašim radnim opterećenjima, infrastrukturi i zahtjevima, možda ćete otkriti da je idealno rješenje mješavina Oluje i Iskra - zajedno s drugim alatima poput Kafke, Hadoopa, Flumea i tako dalje. U tome je ljepota otvorenog koda.

Koji god put odabrali, ovi alati pokazuju da se BI igra u stvarnom vremenu promijenila. Moćne opcije nekad dostupne samo elitnim nekolicini sada su na dohvatu većine, ako ne i svih, srednjih i velikih organizacija. Iskoristite ih.