Apache Storm
U prošlom tekstu sam spomenuo Storm u kontekstu obrade podataka u realnom vremenu. U ovom tekstu pisaću malo detaljnije o Storm-u, o tome šta je, kako radi, kako se programira i pomenuću neke primere. Preporučujem da pročitate tekst Hadoop i obrada u realnom vremenu pre nego što nastavite.
Šta je to Storm?
Storm je open source alat za distribuiranu obradu podataka u realnom vremenu. Tačnije, ovaj alat se koristi kada želite da obradite podatke u trenutku kada su nastali (Streaming Analytics). Storm se zbog svojih karakteristika našao kao neizostavni alat u Hadoop ekosistemu ako govorimo o obradi podataka u realnom vremenu. Ako se pitate čemu služi, lista odgovora bi mogla da bude duga. Neki od najčešćih zadataka Storma bi bili: ETL, obrada u realnom vremenu, online machine learning, ako želite da vršite konstantne proračune… Ako dovoljno upoznate alat, verovatno možete da proširite ovaj spisak.
Kada govorimo o brzini Storm-a, ako pogledamo testove, sposoban je da obradi milion redova u sekundi po mašini. Naravno da ovo zavisi i od same mašine. Skoro sam malo testirao Storm i mogu reći da sam bio oduševljen. Nisam uvodio nikakve testove, već je ovo moje zapažanje, koristeći virtuelnu mašinu sa možda 2GB radne memorije.
Kako radi?
Ako pogledamo arhitekturu Storm klastera, ona dosta liči na Hadoop arhitekturu. Kod Hadoop-a imamo MapReduce poslove, dok kod Storma imamo topologije. Postoje velike razlike, ali ako gledamo glavnu razliku, onda možemo reći da se Hadoop posao nekad završi, dok topologija traje beskonačno (osim ako je ne isključite). I Storm ima svoj Master node i Worker nodes, ali u ove detalje neću da ulazim previše, već želim da se fokusiram na topologije.
Topologija je običan DAG (Directed Acyclic Graph) koji se sastoji od Spout-ova, koji predstavljaju izvore podataka, odnosno čvor koji čita podatke sa nekog izvora. Druga komponenta je Bolt, čvor koji obrađuje podatke. Jedna Storm topologija može da kombinuje više Spout-ova i Bolt-ova. Tako da možemo da imamo dva izvora, npr. jedan je twitter koji traži samo tvitove koji u sebi sadrže #hadoop, a drugi bi tražio #storm. Sledeće, koristili bi jedan Bolt koji broji ukupan broj tweet-ova za ove dve reči čitajući iz ova dva Soput-a. Tako da možete da se igrate topologijom. Što se tiče modela podataka Storm na sve gleda kao na Tuple.
Programiranje
Lepo je znati teoriju, ali treba je iskoristiti. Storm je jako interesantan alat i poput Hadoop-a podržava višejezičnost. Spout-ove i Bolt-ove je moguće pisati u raznim programskim jezicima, Java je standard, a sam alat je pisan u Clojure programskom jeziku. Ja lično volim da testiram Storm pišući u Pythonu, brzo se piše, možete da se poslužite Yelp-ovim modulom koji stvarno olakšava život. Celu topologiju je moguće napisati u samo Python-u, ali isto tako moguće je pisati delove u Javi delove u Pythonu. Čitajući o tome koji programski jezik da izaberem, naišao sam na razne odgovore. Neki moj savet je ako niste Java programer da počnete lagano za jezicima kao što su Python ili Ruby. Ako to reši vaš problem, topologija ima smisla i na kraju rešili ste neki poslovni problem uvek možete da prepišete Python kod u Javu. U svakom slučaju prva stanica treba da vam bude zvanična dokumentacija.
Programiranje Bolt-ova podrazumeve da znate i Storm grupisanja, bez obzira koji jezik koristite ovo uvek važi.
- Shuffle – Šalje tuple-ove u bolt na slučajan način, koristi se npr. za matematiku.
- Fields – Šalje podatke na osnovu jednog ili više polja.
- All – Šalje jednu kopiju svakog tuple-a svim primaocima.
- Custom – Prilagođeno za obradu sekvenca.
- Direct – Izvor odlučuje kom Bolt-u da prosledi podatke.
- Global – Podaci se šalju sa više izvora na jedan Bolt, tipično je za operaciju brojanja.
Kako početi.
Za neki brz primer predlažem, a u slučaju da niste upoznati sa Javom, Python modul Pyleus koji je razvijen od strane Yelp-a i može se naći na gitu. Tamo možete pronaći par primera i odlično uputstvo. Za one koji su upoznati sa Javom destinacija je Storm zvanični sajt.
Bez obzira koji operativni sistem koristite preporučujem da koristite virtuelnu mašinu sa Ubuntu operativnim sistemom. Moj predlog je da se upoznate i sa Vagrant-om, i na taj način testirate, i na kraju možda podelite i sa drugima. Ja ću se potruditi da sredim jednu mašinu i okačim na Internetu, koja bi služila za testiranje Hadoop-a, Storm-a i možda još nekih alata.
I na kraju ako uporedimo Hadoop i Storm vidimo da u kombinaciji mogu da budu jako moćni i da reše probleme brzine koje ima Hadoop. Nastavljamo dalje da hadupujemo i da širimo Hadoop priču i kod nas i regionu.