Hadoop #1: Giris

Hadoop distributed computing frameworkune genel olarak bir goz atacagiz. Neler var?

- HDFS
- MapReduce
-Yarn

Big data da bana mi big?
Facbook'un toplamda 300 Petabyte data store ettigi ve gunde 600 terabyte datayi isledigi soyleniyor. Her ay Facook'a 1 milyar kisi log-in oluyor. Her gun 2.7 milyar like veriliyor. Her gun 300 milyon resim Facebook'a yukleniyor. 

NSA toplamda 5 exabyte data sakladigi soyleniyor. Gunde 30 petabyte data isledigi ve internet trafiginin %1.6 sini takip ettigi bunlara web aralamalari , ziyaret edilen siteler, telefon konusmalari, kredi karti ve hesap hareketleri finansal ve saglik bilgileri de dahil. 

Babalarin babasi Goole ise toplamda 15 exabyte veri barindirdigi soyleniyor. Her gun 100 petabyte datayi isliyor. 60 trilyon web sayfasini indexinde barindiriyor. Her ay toplamda 1 milyardan fazla arama yapiliyor. Her saniye 2.3 milyon arama demek oluyor. 

Bigdata sistem gereksinimleri
- Storerage : Bigdata sistemlerinde cok fazla data olur (surprise mf) bunun saklanmasi gerekiyor
- Process: Belirli bir zaman kisitlamasi altinda (yani her gun belki) bu ham datadan anlamli bilgiler cikarartilmasi ihtiyaci. Yani bu datanin islenmesi gerekiyor. 
- Scalable altyapi: Yukaridaki 2 gereksinimi saglamak icin ucuncu bir requirement de tum altyapinin scalable olmasi yani olceklenebilmesi. Bugun 2 petabytre data icin calisan sistem yarin 12 petabyta icin olceklenemiyorsa, patlar. 

Bu gereksinimler artik geleneksel tek makina gibi , buyuk server gibi yaklasimlarla karsilanamiyor. Bunu icin distributed computing yani dagitik bir mimari gerekiyor. Hadoop gibi.

2 Yol 
Bahsettigimiz buyuk verilen saklanmasi, islenmesi ve scale edilebilmesi problemi icin veya daga genel olarak herhangibir computing problemi 2 sekilde cozulebilir:

1- monolithic : hersey tek makinede olup biter. Data da bu tek makinede saklanir, isleme isi de bu tek makinede yapilir.
2- distibuted : birden fazla makine birbirine bagli sekilde, ama programci acisindan tek bir makineymis gibi davranarak. 

Bu yontemleri kiyaslamak icin genelde basketboldan ornek verirler. Ilk yontemde bir star oyuncunuz var (supercomputer ya da cok yuksek derecede verticallly scale edilmis tek makine) ama ikinci yontemde paralelde islem yapmasini bilen birden falza `iyi` oyuncunuz var (commodity (siradan) bilgisayarlardan olusan bir ag).   

Monolitik yapida tek bir makine tum isi yapiyor. 

Ditributed sistemde ise birden fazla makine (node) var. Bunlar aralarinda guzel bir sekilde iletisim kurarak verilen isleri yerine getiriyorlar. Bu sekilde birden fazla makinein tek makine gibi davranmasina da cluster diyoruz. Bu sekilde calisan bir cluster lineer olarak scale edilebilir.  Eger isleyeceginiz veri 2 katina cikarsa, node sayisini da 2 katina cikarabilirsiniz. Bu sayede saklama alanini da 2 katina cikarmis olursunuz. Paralel isleme yetenegine sahip bir yazilim calistigini kabul edersek de toplam islem hizi yaklasik olarak 2 katina cikar. Bu koordinasyon yazliminin su sekilde ihtiyaclari olacaktir:

- data partitioning: bir veri birdan fazla makinede saklanabilmelidir. Bu sayede bir node olurse, ayni verinin diger bir makinedeki kopyasi (replika) kullanilabilir
- task yonetimi ve koordinasyonu: datayi isleyecek tasklarin paralel sekilde birden fazla makine uzerinde calistirilmasi ve uretilen sonucun da birden fazla makine uzerine yazilmasi isinini koordine edilmesi gerekir. 
- fault tolerance and recovery : sistemdeki makineler siradan (commodity) oldugu icin her an birisi patlayabilir. Her yapilan is bunu goz onunde bulundurularak yapilmalidir. Bir disk patlayabilir, node gidbilir bunlarin hepsinin handle edilmeis gerekiyor.

 Goruldugu gibi distributed sekilde calisacak bir yazilim gelistirmek karmasik bir is. Benim gibi siradan programcilarin kendi yazdiklari uygulamari direk olarak cluster uzerinde calistirabilmesi demek cok fazla bu konulara odaklarak, esas yapilmasi gereken isi yapamaz haline gelmesi demek. Tam bu noktada Hadoop gibi, bu isleri siradan programcidan saklayacak, bir soyutlama katmanina ihtiyac duyuluyor. 

Google
Google 2000 senesinde, web aramalari icin bu buyuk verilerin geleneksel yontemlerle islenemeyecegini anladi ve kendi distributed computing framework'unu gelistirdi. (Bence bu Google'i Google yapan buyuk verileri isleyebilmesi yetenegi olmustur). Bu sayede bir veri isleme taskini yuzlerce hatta binlerce dandik bilgisayar uzerinde calistirabilmeye basladi. 

Birinci hedef milyonlarca kaydi birden fazla makine uzerinde saklamakti. Burada ilk karsilasilan problem ise hangi kaydin (satir veya row da diyebiliriz) hangi makinede oldigunu bilebilmekti. Ikinci hedef ise dagitik olarak saklanan bu verilerin yine dagitik olarak birden fazla makine tarafindan paralel bir sekilde islenebilmesiydi. Google File System ve MapReduce teknolojileri ile bu iki problemi cozduler. Google File System, datayi birden fazla makine uzerinde dagitik olarak saklanmasini ve okumasini sagliyordu. MapReduce de distributed computing problemini cozuyordu. Bu cozumler uretildikten sonra bunlar hakkinda akademik makaleler yayinlandi. Google File System ve MapReduce paperlarina linklerden ulasabilirsiniz.  

Hadoop
Google paperlari yayinladi, bu iki sistemin nasil calistigini ve hangi problemi cozduklerini anlatti ama implementasyonu hicbir zaman aciklamadi. Opensource etmedi. Bu paperlar yayinlandiktan sonra Yahoo muhendisleri tarafindan opensource karsiliklari implemente edildi. 

Google File System ---> HDFS 
Google MapReduce ---> MapReduce

Seklinde bir eslesme yapilabilir. HDFS, dagitik dosya sistemi ve MapReduce de dagitik sekilde duran dosyalari cluster uzerinde paralel olarak isleyip sonuc ureten framework. Bu ikisi Hadoop adi verilen (bir programcinin oglunun oyuncak filinden esinlenilmis) opensource big-data isleme frameworkunu olusturuyor. 

Hadoop halen daha surekli olarak gelistiriliyor. 2013 senesinde MapReduce kismi da ikiye ayrildi. Bu ayrilmadan sonra MapReduce sadece data isleme taskinin tanimlanmasini saglayan kisim olurken, YARN olarak adlandirilan kisim ise bu tasklarin cluster uzerinde calistirilmasindan sorumlu kisim oldu. Onceden iki sorumluluk da tek bilesene aitti. Bu sayede iki sorumluluk ayrilmis oldu ve YARN, calistirilacak taskin ne oldugu ile ilgilenmeden sadece onun calistirilmasi ile ilginenirken, MapReduce kismi da bu taskin nasil calistirilacagindan bagimsiz olarak taskin ne yapmasi gerektigine odaklandi. 

Ozet olarak gunumuzde Hadoop uc bilesenden olusmaktadir: HDFS, MapReduce ve YARN. Bir data processing taskini Hadoop uzerinde kosmak isterseniz:

1- Java MapReduce  apileri kullaniarak map ve reduce tasklarini tanimlanir. Bu sayede data uzerinde nasil islemler yapilmasi gerektigi tanimlanir ve bir Job olarak kaydedilir. 
2- MapReduce job'u YARN'a gonderilir. YARN, bu jobun calisabilmesi icin gerekli kaynaklarin cluster uzerinde mevcut olup olmadigina bakar ve jobu calistirir. Uretilen ciktiyi ise yine HDFS uzerinde saklar. 

Hadoop aslinda Google'in distributed computing'de bir devrim yaratan kendi sistemine karsilik gelen bir ekosisteme donusmus durumda.  Bu ekosistemin diger bazi bilesenleri :

- Hive: SQL tarzi queryler ile HDFS uzerinde bulunan datanin sorgulanmasini saglar. SQL interface to Hadoop seklinde tanimlanmasi cok aciklayici bana kalirsa. Sql tarzinda yazilan declerative data isleme joblarini map-reduce joblarina donusturur. 

- HBase : Batch islemler icin tasarlanmis olan HDFS uzerinde calisan low-latency bir database uygulamasidir. MapReduce uygulamalari tarafindan normal bir database gibi kullanilabilir. Google'in BigTable yaklasiminin opensource karsiligi olarak gorulebilir. Milyarlarca satir ve milyonlarca stundan olusan wide table seklindeki datayi cluster uzerinde saklayabilir ve sorgulayabilir. 

- Pig : Log dosyalari gibi pek fazla structure'i olmayan datalari alip manuple edip structured bir hale getiren bir scripting sistemidir. Daha sonra bu structured hale gelen data Hive ile SQL kullanilarak sorgulanabilir.

- Oozie: Workflow yonetim sistemi. Apache Airflow saniyorum daha onde.

Flume / Sqoop : Hadoop'a data aktarmayi ve data almayi saglar. 

- Spark : Cok karmasik data isleme pipeline'larini fonksiyonel bir yaklasimla calistimayi saglar



Yorumlar

Bu blogdaki popüler yayınlar

Python'da Multithreading ve Multiprocessing

Threat Modeling 1

Encoding / Decoding