Map Reduce nedir? ne işe yarar? kullanılmalı mı?

soruldu: 14 Şub '13, 01:52

ercet00ilk's gravatar image

ercet00ilk
994435662
cevap kabul oranı: 11%

değiştirildi: 14 Şub '13, 03:00

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183

1

Zaten yeterince anlatılmış, bence önce var olanları bir araştırın, kullanın, takıldığınız ve anlamadığınız yerleri sorun : https://www.google.com.tr/search?q=mapreduce+nedir&aq=f&oq=map&aqs=chrome.3.0j5j57j59j60l2.3339&sourceid=chrome&ie=UTF-8

(14 Şub '13, 01:55) AliRıza Adıyahşi ♦ AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image

ben bunları okudum fakat bir programlama dili veya projesi mi yani ezcümle indirilip kullanılabilecek yada geliştirilebilecek bir şey mi diye sormuştum..

işte bir soru daha Hadoop nedir?

(14 Şub '13, 02:06) ercet00ilk ercet00ilk's gravatar image

beyfendi ben bir soru sordum biliyorsanız cevap verirsiniz ya da vermezsiniz bu size kalmış, neyin nerede olacağına karar vermek bizim burada olma amacımızı aşan bir konudur. bunun dışında link verirken buradan şeklinde vermeniz daha zarif olur. sanırım siz sorumu anlamadınız. ben indirip kullanabileceğim bir opensource kaynak veya bir studio gibi program var mı diye soruyorum.

(14 Şub '13, 02:27) ercet00ilk ercet00ilk's gravatar image

Yanlış anlamayın ama sorular biraz daha özelleştirilmiş olmalı. Yani size, uygulamanıza ve ya çalışma alanınıza özel sorular olmalı ki sitenin kalitesi ve çeşitliliği artsın. Bu arada link verirken yorum satırında linki nasıl düzenleyeceğimi bilmiyorum, cahilliğime verin kusura bakmayın.

(14 Şub '13, 02:28) AliRıza Adıyahşi ♦ AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image

sorduğum soru zaten özel bir sorudur, google gibi bir sitenin alt yapılarını hazırlarken kullanılmış bir yapıdan bahisle, "bu neymiş acaba?" deyip açıp bakılmış basit bir şekilde anlatılmış konuları örnek gösteriyorsunuz. bunlar zaten dediğiniz gibi google'da var ve bir kaçını da okudum. fakat adam akıllı elle tutulur bir şey bulamadım. yoksa basit bir soru sormak amacım değil..

(14 Şub '13, 02:43) ercet00ilk ercet00ilk's gravatar image

estağfirullah, google altyapısında kullanılan deyince büyük karmaşık kod blokları falan düşünmüştüm..

(14 Şub '13, 04:07) ercet00ilk ercet00ilk's gravatar image
7 yorumdan 5 tanesi gösteriliyor hepsini göster

Map Reduce nedir?

Büyük veri kümelerini işlemek için kullanılan bir programlama modeli/algoritması.

Ne işe yarar?

MapReduce genel olarak dağıtık halde bulunan ağları(Distributed computing) ve ya tek bir sistem gibi çalışan bilgisayarlar topluluğunu (Computer cluster) oluşturmak ve yönetmek için kullanılır.

Kullanılmalı mı?

Büyük veri setlerinde indeksleme, arama, analiz ve filtreleme yapmak için kullanılabilir. Bir çok programlama dili yazılımcı için yeteri kadar, Map/Reduce kullanmadan yapılacak işlemler için hazır sınıflar ve fonksiyonlar sunmaktadır.

Yorumlarınızdan sonra

Map/Reduce algoritmasını daha iyi anlamak için, örneğin elimizde bir liste var,

Liste : {1,2,3,4,5,6,7,8,9,10}

MAP

Bu listenin her elemanına bir işlem uygulamak istiyoruz (Google için örnek vermek gerekirse, web üzerindeki her sayfa için bir indeks degeri belirlemek), örneğin her elemana 2 ekleyelim.

C# MAP

static void Main(string[] args)
{
    var testList = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    var mapList = Map<int, int>(x => x + 2, testList);

    //listenin elemanlarını tek tek yazdır...
    mapList.ToList<int>().ForEach(i => Console.Write(i + " "));
    Console.WriteLine();
    Console.ReadKey();
}

// her elemana tek tek uğra (mapping)
static IEnumerable<TResult> Map<T, TResult>(Func<T,TResult> func, IEnumerable<T> list)
{     
    foreach (var i in list)
        yield return func(i);
}

Yeni liste : {3,4,5,6,7,8,9,10,11,12}

REDUCE

Şimdide listedeki elemanların toplamını (x,y) = x + y alalım. Tabi bu sırası ile olacak ve tek değer dönecek. (Google için: indekslenen sayfalar içerisinde dolaşıp, bunları birbirleri ile karşılaştırıp, tek tek filtreleyerek en iyi sonucları bulması. Aslında map in uğrayıp işaretlediği sayfaları reduce bulup süzgeçten geçirerek filtreliyor.)

C# REDUCE

static void Main(string[] args)
{
    var testList = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
    Console.WriteLine(Reduce<int, int>((x, y) => x + y, testList, 0));
    Console.ReadKey();
}

static T Reduce<T, U>(Func<U, T, T> func, IEnumerable<U> list, T acc)
{
    foreach (var i in list)
        acc = func(i, acc);

    return acc;
}

Sonuç : 55

Başta demiştim bazı programlama dilleri yeterince imkan sunuyor diye; Aynı kodların LINQ karşılığı:

LINQ MAP

list.Range(1, 10).Select(x => x + 2);

LINQ REDUCE

list.Range(1, 10).Aggregate(0, (acc, x) => acc + x);

ÖZET: Map verilerin yerini belirler/işaretler/işlem uygular/eşleştirir ,Reduce ise map in yaptığı işlemleri kullanarak verileri filtreler/azaltır.

alt text

permanent link

cevaplandı: 14 Şub '13, 03:47

AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image

AliRıza Adıyahşi ♦
7.9k146288
cevap kabul oranı: 44%

değiştirildi: 14 Şub '13, 09:59

teşekkür ederim. bu yapının bir kaç metoddan ibaret olduğunu öğrenmiş oldum.

(14 Şub '13, 04:04) ercet00ilk ercet00ilk's gravatar image
2

Ali Rıza, eline sağlık, aydınlatıcı ve çok güzel bir belge olmuş. Teşekkür ederim.

(06 Ağu '13, 03:14) Oğuz Çelikdemir O%C4%9Fuz%20%C3%87elikdemir's gravatar image

Matematiksel açıdan Map işlemi "fonksiyon" yordamıyla her elemanı diğer bir elemana dönüştürmek olarak açıklanabilir. Reduce işlemi ise bir nevi sonuç kümesinin özetlenmesi gibidir.

Raporlamalardaki ortalama alma, kayar toplamlar ve gruplamaların hepsi bu özetleme işleminin sonucu olarak üretilebilir. Yani aslında hep yaptığımız işler.

Dikkat edilmesi gereken hususlar:

  • Özet işlemi için dönüştürme işleminin tamamının bitmesine ihtiyaç yoktur. Pek çok özetleme işlemi dönüştürmenin tamamen bitmesinden bağımsız çalışabilir.
  • Dönüşüm işlemi paralel çalıştırılabilir.
  • Dönüşüm-özet işlemleri couchdb, google bigtable, apache cassandra gibi modern NoSQL veritabanlarının temelini oluştururlar.
  • Dönüşüm-özet işlemleri lisp, haskell gibi fonksiyonel dillerde sıkça görülen "lazy", yani sonuçların anında hazır edilip hafızada yer kaplaması yerine, ihtiyaç oldukça üretilmesi kavramıyla yakından akrabadır.

Qt/C++ ile paralel paralel dönüşüm-özet işlemi örneği:

#include <QtCore>

unsigned long long map_fun(unsigned long long i)
{
  return i* 2;
}

void reduce_fun(unsigned long long &r, unsigned long long i)
{
  r+= i;
}

int main()
{
  QList<unsigned long long> wtf;
  // 5 milyon sayı üret
  for(unsigned long long n= 5000000ul; n--;)
    wtf.push_back(n);
  // Her sayıyı iki ile çarptıktan sonra toplama ekle. Dönüşüm işlemini CPUlar üzerinde dağıt.
  auto r= QtConcurrent::mappedReduced(wtf, map_fun, reduce_fun);
  r.waitForFinished();
  qDebug()<< r.result();
}
// $ g++ -O2 main.cpp -std=c++11 `pkg-config QtCore --cflags --libs` && ./a.out
// $ 24999995000000
permanent link

cevaplandı: 15 Şub '13, 05:40

nurettin's gravatar image

nurettin
2.2k2441
cevap kabul oranı: 14%

değiştirildi: 15 Şub '13, 05:42

Bu blogdan takip edebilirsin: http://hadoopcluster.blogspot.com/

permanent link

cevaplandı: 04 Ağu '13, 19:49

yagmurkilic29's gravatar image

yagmurkilic29
4612
cevap kabul oranı: 0%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1

Soruldu: 14 Şub '13, 01:52

Görüntüleme: 1,361 kez

Son güncelleme: 06 Ağu '13, 03:14

Benzer sorular

powered by BitNami OSQA