Merhaba,
Dünkü map-reduce
ile aslında bigdata’ nın en önemli konusuna girmiş olduk. Map kısmında satır
satır yani row by row işlem yapıldığını, reduce kısmında ise sonuçların
toplandığını ve sunulduğundan bahsetmiştim.
Bugün bu işlemler yapılırken hdfs file blocks ile ilişkisini ve nasıl distributed bir çalışma olduğundan senaryolaştırarak anlatmak isterim.
Bugün bu işlemler yapılırken hdfs file blocks ile ilişkisini ve nasıl distributed bir çalışma olduğundan senaryolaştırarak anlatmak isterim.
Klasik Yöntem
İle Arama:
Adını şimdi ben koydum esasında. Diyelim ki elininizde 640 MB bir dosya var. Bu dosya içinde “Bilgisayar Mühendisi” geçen ifadeleri aramak ve toplam kaç tane olduğunu bulmak istiyorsunuz. Önceki map-reduce’ te verdiğim örneğin aynısı esasında. Bu dosya 640 MB şeklinde tek bir makinada tek bir diskte durduğunda ve siz search işlemi çalıştırdığınızda 640 MB lık dosya tek bir thread yada cpu işleminde okunduğunu düşününüz. Bir işçi – makina 640 MB dosyada işlem yapmaya çalışıyor yani.
Adını şimdi ben koydum esasında. Diyelim ki elininizde 640 MB bir dosya var. Bu dosya içinde “Bilgisayar Mühendisi” geçen ifadeleri aramak ve toplam kaç tane olduğunu bulmak istiyorsunuz. Önceki map-reduce’ te verdiğim örneğin aynısı esasında. Bu dosya 640 MB şeklinde tek bir makinada tek bir diskte durduğunda ve siz search işlemi çalıştırdığınızda 640 MB lık dosya tek bir thread yada cpu işleminde okunduğunu düşününüz. Bir işçi – makina 640 MB dosyada işlem yapmaya çalışıyor yani.
Aynı işlemi şu
şekilde yapsa idik:
Distributed
İşlemYapma:
Aynı örneğimizi biraz değiştirelim. 640 MB bu dosyayı 10 ayrı parçaya bölüm 10 ayrı makinada tuttuğunuzu düşününüz. 10 ayrı makina ve her birinde 64 MB lık dosyacıklar var. Tamamı yani 640 MB tek bir makina yerine 10 ayrı makinada her birinde 64 MB lık dosyacıklar var ve siz her bir 10 ayrı makinada ayrı ayrı search yapıyorsunuz. Kusra kalmayın. Aynı cümleyi bir kaç kez yazdım. Üzerine vurgu yaparak daha iyi anlatmak istedim. Önceden tek bir işci yada makina 640 MB lık dosya da işlem yaparken şimdi 10 tane işçi daha ufak bir dosyada yani 64 MB lık dosyada işlem yapıyor. Bu işlem map adımı. Hepsinden gelen sonuçlar toplanıp, sonuç olarak verilmesi ise reduce oluyor.
Aynı örneğimizi biraz değiştirelim. 640 MB bu dosyayı 10 ayrı parçaya bölüm 10 ayrı makinada tuttuğunuzu düşününüz. 10 ayrı makina ve her birinde 64 MB lık dosyacıklar var. Tamamı yani 640 MB tek bir makina yerine 10 ayrı makinada her birinde 64 MB lık dosyacıklar var ve siz her bir 10 ayrı makinada ayrı ayrı search yapıyorsunuz. Kusra kalmayın. Aynı cümleyi bir kaç kez yazdım. Üzerine vurgu yaparak daha iyi anlatmak istedim. Önceden tek bir işci yada makina 640 MB lık dosya da işlem yaparken şimdi 10 tane işçi daha ufak bir dosyada yani 64 MB lık dosyada işlem yapıyor. Bu işlem map adımı. Hepsinden gelen sonuçlar toplanıp, sonuç olarak verilmesi ise reduce oluyor.
Diyeceksiniz ben
dosyayı 64 MB block’ lar halinde nasıl bölebilirim?
Nasıl ayrı ayrı makinalarda işlem yapıp, her bir makinada ki sonunucu toplayıp gösterebilirim?
Nasıl ayrı ayrı makinalarda işlem yapıp, her bir makinada ki sonunucu toplayıp gösterebilirim?
İşte bu işlemi
hadoop – hdfs sistemi otomatik yapıyor. Yani sizin bunu düşünmenize gerek yok.
Hdfs = Hadoop Distributed File System olarak açılımı var.
Siz hadoop sistemini kurduktan sonra ve hdfs sistemine dosyaları kopyalamaya başladıktan sonra her bir dosya 64 MB’ lık bloklar halinde HDFS sistemine kopyalanmaktadır. İşte bu her bir 64 MB blocklara hadoop sisteminde DataNode denilmektedir. Her bir makinada hadoop sistemi kurduğunuzda TaskTracker denilen Map-Reduce jobları yer almaktadır. Ana makinada yada master hadoop makinasında ise TaskTracker’ a ek olarak JobTracker vardır ve sonuçları toplayıp size sunar. Yani bir bakıma reduce eder.
Siz hadoop sistemini kurduktan sonra ve hdfs sistemine dosyaları kopyalamaya başladıktan sonra her bir dosya 64 MB’ lık bloklar halinde HDFS sistemine kopyalanmaktadır. İşte bu her bir 64 MB blocklara hadoop sisteminde DataNode denilmektedir. Her bir makinada hadoop sistemi kurduğunuzda TaskTracker denilen Map-Reduce jobları yer almaktadır. Ana makinada yada master hadoop makinasında ise TaskTracker’ a ek olarak JobTracker vardır ve sonuçları toplayıp size sunar. Yani bir bakıma reduce eder.
Bir de çok
duyarsınız. Hadoop – hdfs sisteminde dosyalar replice edilir. Evet siz 640 MB
bu dosyayı hdfs sistemine kopyaladığınızda, replike olarak aynı kopyası diğer
işçilerde-makinalarda yer alır. Default değeri 3 mesela. 3 tane kopyası var
dosyalarınızın.
Peki neden
kopyasını alıyoruz? Tabi ki bir makinaya birşey olduğunda datayı kaymetmemek
adına. Gerçek bir örnek verelim. Aşağıdaki bilgiler yahoo firmasının hadoop
makina bilgileridir.
*More than
100,000 CPUs in >40,000 computers running Hadoop
*Our biggest cluster: 4500 nodes (2*4cpu boxes w 4*1TB disk & 16GB RAM)
*Our biggest cluster: 4500 nodes (2*4cpu boxes w 4*1TB disk & 16GB RAM)
40000 üzerinde
makina. Biri down olursa veri ne olacak? Çalışan map-reduce komutları eksik
sonuç verecek. İşte bunu engellemek için makina bozuldu ise aynı veri başka bir
node ‘ ta yer almaktadır.
Aşağıda benim
kendi kurduğum hadoop sisteminde büyük bir dosyanın nasıl 64 MB blocklar
halinde tutulduğunu görebilirsiniz.
Bugünkü yazımız bu kadar.
Konunun biraz daha iyi anlaşıldığını sanıyorum.Lütfen her türlü yorum-eleştiri-tartışma vs. gönderebilirseniz sevinirim.
Hangi konuda yazmamı istiyorsanız bunu da paylaşabilir misiniz?
not: aşağıdaki resim internetten alıntıdır.
not : bu resim kendi hadop sisteminden bir resimdir.


Hiç yorum yok:
Yorum Gönder