Spark #1: Neden?

Daha da cok ovecegiz

Problem
Cok buyuk ve cesitli verileri (data volum and variety) belirli bir sure icerisinde islemek gerekiyor. 

Cozum
Bircok cozum var. 

Grep
Binlerce text dosyasi uzerinde bir grep komutu ile cok guzel data isleyebilirim. Ama bu islemi sadece tek bir bilgisayar uzerinde yapabilirim degil mi? Eger elimdeki data tek bir bilgisayara sigmayacak kadar buyukse bu secenek duser. 

MapReduce
Bu problemi goren yetkililer MapReduce adini verdikleri bir programlama paradigmasi ile cikip gelmisler.  Bu sayede birden fazla makine uzerinde data islemek mumkun hale gelmis. Baya bir sure de bu yapiyi kullanmislar mutlu mesut.

Spark
Ancak, mapreduce uygulamari yazmak cok fazla kodlama gerektirmesi, harddisk islemini cokca barindirmasi gibi  bagzi kotu taraflarini goren bir abimiz, ben hafiza bazli, abstractionlari cok guzel bir framework yazayim demis. Adini da Spark koymus.

- Daha az kod yazmayi gerektiriyor. Hatta uygulamaniz dagitik calisacakmis gibi bile gorunmuyor. Cunku abstraction'lar cok guzel implemente edilmis. Siz normal bir list ya da array uzerinde calisiyormus gibi gorunmenize ragmen aslinda bu array bircok makine uzerine dagitilmis durumda.  

- MapReduce'te complex data islemleri yazmak zor, cunku yazdiginiz uygulama sadece map veya reduce islemi yapabilir. Ve her map-reduce isleminden sonra ortaya cikan intermediary data, diske yazilmak ve oradan tekrar okunmak zorunda. Ama Spark'da map veya reduce phase'lerinin boyle bir ayrimi olmdigi icin complex ETL islemleri kolayca yazilabiliyor. Ayrica ara adimlar diska kaydedilmek zorunda degil cunku spark mumkun oldugunca bu ara datayi hafizada tutuyor. 

- Hal boyle olunca Spark mapreduce'a gore cok daha hizli calisiyor (sorting challenge'inda 3x mertebesinde yenmisti hadoop mapreduce'u). Zaten o andan itibaren de endustri standardi haline geldi. 

- Ayrica uygulama kodu ile uygulama deploymentinin ayiriyor. Yani siz bir Spark islemi yaptiginizda, framework bu kodu otomatik serialize edip cluster'da calistiriyor. Bu sayede interactive shell'e sahip olabiliyoruz. 

- Spark ile batch veya streaming olarak data islemek mumkun, graph yapilari uzerinde de calisabiliyor ve son olarak da ML kutuphaneleri ile distributed machine learning yapilabiliyor. (zaten cikis amaci da bu aslinda).

Iste bu sebeplerden oturu Spark kullanmaliyiz arkadaslar. Ama nasil kullanmaliyiz? Onu da gelecek yazilarda gorecegiz. Ciao!

 

 

Yorumlar

Bu blogdaki popüler yayınlar

Python'da Multithreading ve Multiprocessing

Threat Modeling 1

Encoding / Decoding