6 Mart 2016 Pazar

map-reduce

Merhaba
map-redurce bence bigdata olayında işin özü. Eğer map-reduce kodlaması yapabiliyorsanız, tüm sorgulamaları vs. rahatlıkla gerçekleştirebilirsiniz.
Bigdata öğrenmek isteyenlere şunu söylüyorum: Bigdata pek çok disiplini bir arada barındırıyor.
Sistem bilginiz olması gerekiyor. Yani linux, kurulum, shell komutları vs.
Database,veriambarı,veri, structered olmayan data vs. vs. bilginiz olması gerekir.
Programlama bilginiz olması gerekir. map-reduce komutları yazabilmek için başta java bilmeniz gerekiyor. Hadoop ve diğer tüm bileşenleri hive-pig-hbase-sqoop-flume vs. vs. hepsi java ile yazılmıştır. Klasik relational databaseden farklı bir ortam yer almaktadır burada. Önceden sqlserver-oracle-teradata vs. kullanmış olanlara bigdatayı biraz anlattığımda hani select nerede şeklinde dönüş yapmaktadırlar. Bu konuyla ilgili yanlış anlamaları da başka bir blog yazımda tartışmak ve yazmak isterim. Select nerede? hadi bigdatanı hızını görelim şeklindeki bilinmeden sorulan soruları yazmak isterim.

Konuyu dağıtmadan map-reduce ile ilgili bu ilk blog yazımıza devam edelim. Unutmadan söyleyeyim map-reduce mantığını tek bir blog ile anlatmak zor. Bundan sonra bir kaç map-reduce yazısını da blog aracılığı ile paylaşacağım.
Map-reduce işlemini en iyi anlatan resim aşağıdadır. 

İnternette map-reduce wordcount örneği diye araştırdığınızda tonlarca site ve java kod örneğini bulabilirsiniz. WordCount örneği aslında o kadar önemlidir ki. Her türlü sorgu vs. işlemlerinde de kullanabilirsiniz.
Map kısmı ile reduce kısmı ayrıdır. Bunu kodlama yaparken de göreceksiniz.
Map class’ ı ve Reduce class’ ı olarak iki ayrı class ve metodlar yer almaktadır. Bunlar neden ayrı bunun da cevabını bundan sonraki blog yazılarımda yazacağım.
Map kısmında vermiş olduğunuz dökümanı row by row alır ve istediğiniz hesaplama yöntemini parser ile gerçekleştirirsiniz. Bu kısım ilk başta çok es geçiliyor. Üzerini vurgulamak için tekrar yazıyorum. Dosyanın satır satır bir döngü ile tek tek bakılmakta-işlenmektedir.
Mesela bir örnek verelim. Senaryolaştırarak anlatayım. Siz bir insan kaynakları bürosunda çalışıyorsunuz. Bu büroya mail aracılığı ile her gün tonlarca cv akmaktadır. Doğal olarak word ile gelen bu cv’ lerin formatları her bir başvuran kişi için farklıdır. Kimisi staj bilgisini yazar, kimisi çok deneyimli olduğundan belki 10 sayfa cv yazısı gönderir. Yani formatlar ve sayfa sayıları bile farklıdır.
Sizden istenen ise bu gelen tonlarca word dökümanlarında içinde “Bilgisayar Mühendisi” yada içinde “Endüstri Mühendisi”, yada içinde “İnşaat Mühendisi” geçen dosyaları ve bunların sayıları istenebilir.
Bilgisayar Mühendisi : 10000 adet
Endüsti Mühendisi : 5000 adet
İnşaat Mühendisi : 4000 adet gibi bir sonuç ve bu dosyaların isimlerini bulmanız istenmektedir.
Bu durumda ne yapabilirsiniz?
İşte tam bir bigdata konusu esasında. Bigdata çünkü veri büyük, bigdata çünkü relational olmayan bir yapıdan sorgulama isteniyor, bigdata çünkü sayısal bir sonuç isteniyor. Bu örneği aslında pek çok şeye uyarlayabilirsiniz. İnternette genelde apache-log ları saydırma vardır mesela. Ne kadar get metodu oldu, ne kadar post metodu oldu, hangi tarihte ve saatte ne kadar işlem yapıldı vs. vs.
İşte map classı ve metodu tek tek bir döngü ile dosyaları dolaşır. Her bir dosyada ise satır satır işlemi yapar. Her bir satır işleminde siz şunu diyebilirsiniz.
Eğer bu satırda “Bilgisayar Mühendisi”, veya “Endüstri Mühendisi” veya “İnşaat Mühendisi” geçiyor ise bunu reduce et. Yani nihai hesaplamada +1 koy. i=i+1 işlemini gerçekle yani.
Diyeceksiniz elimizdeki tonlarca dosyada, row by row bu işlem saatlerce sürmez mi?
İşte burada da dağıtık mimari, dağıtık programlama hadi havalı olsun ingilizce diyelim distributed kavramı devreye giriyor.Bigdata yan yana istediğiniz kadar makinayı kullanabilmenizi sağlıyor. Bu iş biraz tekelden çıktığını gösteriyor. Siz bugün iki adet laptop kullanarak hadoop sistemi oluşturabilirsiniz. Bir master ve bir slave şeklinde. Baktınız işiniz büyüdü yani veriniz arttı buna ikinci, üçüncü, yüzüncü laptop’ ınızı yan yana koyarak hadoop sisteminizi yaygınlaştırabilirsiniz.
Bu konuya yani distributed konusuna ufak girdikten sonra bundan sonraki blogta bu işin detayına gireceğim.
Bugünkü blog yazım bu kadar. Hep dediğim gibi. Yavaş yavaş kavramları ve neyin ne olduğunu anlatmaya çalışıyorum. Bloglar ilerledikçe data fazla detaya giriceğim.
map-reduce ile ilgili aşağıdaki vereceğim linke lütfen bakınız. İşin özünü burada senaryolaştırarak çok güzel anlatılmıştır.
Kısa bir sunum. Bakmanızı tavsiye ederim.
http://www.slideshare.net/esaliya/mapreduce-in-simple-terms
mmetin

2 yorum:

  1. Merhaba, bilgi paylashiminiz ichin teshekkurler. Ama sunumlar okunakli degil.

    YanıtlaSil
  2. Hocam map ve reduce kısmında satırlarca kodu yazmak yerine scala yazarak aynı işi yapamaz mıyız? Bu arada elinize sağlık.

    YanıtlaSil