MapReduce'taki yenilik nedir?


68

Birkaç yıl önce, MapReduce dağıtılmış programlama devrimi olarak selamlandı. Aynı zamanda eleştirmenler de vardı, ancak genel olarak hevesli bir yutturmaca vardı. Hatta patentli bile oldu! [1]

Adı anımsatır mapve reducefonksiyonel programlamada, ama ben okuduğumda (Vikipedi)

Harita adımı: Ana düğüm girişi alır, daha küçük alt problemlere böler ve bunları çalışan düğümlere dağıtır. Bir işçi düğümü bunu tekrar yapabilir ve çok seviyeli bir ağaç yapısına yol açar. İşçi düğümü daha küçük olan sorunu işler ve yanıtı ana düğümüne geri gönderir.

Küçültme adımı: Ana düğüm daha sonra tüm alt sorunların cevaplarını toplar ve çıktıyı oluşturacak şekilde bunları birleştirir - başlangıçta çözmeye çalıştığı sorunun cevabı.

veya [2]

MAP'ın Internals: [...] MAP giriş değerini kelimelere ayırır. [...] MAP, girişin verilen her bir anahtar / değer çiftini potansiyel olarak birçok ara anahtar / değer çifti ile ilişkilendirmek içindir.

REDUCE'in İç: [...] [REDUCE] zorunlu birleştirme gerçekleştirir (örneğin, azaltma): birçok değer alır ve bunları tek bir değere düşürür.

Yardım edemem ama düşün: bu bölünme ve fethetme (Mergesort anlamında), sade ve basit! Öyleyse, MapReduce'da bir yerde (kavramsal) bir yenilik var mı, yoksa belirli senaryolarda yararlı olan eski fikirlerin yeni bir uygulaması mı?


  1. ABD Patenti 7,650,331: "Verimli büyük ölçekli veri işleme için sistem ve yöntem" (2010)
  2. Google'ın MapReduce programlama modeli - R. Lämmel (2007) tarafından revize edildi

7
Yenilik yok. Bunu bir cevap haline getirmeyeceğim, ancak hesaplamada yeni olan hiçbir şeyin, hatta dağıtılmış hesaplamanın MapReduce tarafından keşfedilmediği kanısındayım.
edA-qa mort-ora-y

@ Aryabhata: Yenilik varsa, bu sorunun iyi ve yapıcı bir cevabı var. Olmazsa, bunu kanıtlamak için çok az şey söylenebilir (belki de MapReduce'u açıkça eski bir tekniğe düşürmek hariç), doğru. Ama böyle hissederseniz, elbette, oy verin!
Raphael

@ edA-qamort-ora-y: Bu durumda, MapReduce'u daha eski terimlerle ifade edebilmeliyiz ve bu iyi cevap verebilir!
Raphael

1
@Raphael, katılıyorum, ancak bunu yapabileceğimden emin değilim. Ancak, burada açıklandığı gibi (ilk alıntı) birleştirme türünün tam harita / azaltma yöntemini kullandığını gözlemleyebilirim. Gerçekten de sıfır değişiklikle dağıtılabilir.
edA-qa mort-ora-y

Yanıtlar:


47

Yardım edemem ama düşünün: bu bölünme ve fethetme, sade ve basit!

M / R bölünmez ve fethedilmez. Önceki algoritmanın daha küçük bir alt kümesine bir algoritmanın tekrar tekrar uygulanmasını içermez. Boru hattı aşamalarının alternatif harita oluşturduğu ve işlemleri azalttığı bir boru hattıdır (daha basit fonksiyonların bileşimi olarak belirtilen bir fonksiyon). Farklı aşamalar farklı işlemler gerçekleştirebilir.


Öyleyse, MapReduce'da bir yerde (kavramsal) bir yenilik var mı, yoksa belirli senaryolarda yararlı olan eski fikirlerin yeni bir uygulaması mı?

MapReduce, hesaplama teorisinde yeni bir çığır açmaz - bir problemi daha basit işlemlere ayırmanın yeni bir yolunu göstermez. Belirli basit işlemlerin belirli bir problem sınıfı için pratik olduğunu göstermektedir.


MapReduce gazetenin katkısı oldu

  1. Belli bir problem üzerinde etkin ve hataya dayanıklı bir şekilde dağıtılabilen iki iyi anlaşılmış ortogonal operatörün bir boru hattının değerlendirilmesi: büyük korpustan bir metin indeksi oluşturma
  2. Harita kıyaslama - düğümler arasında ne kadar veri aktarıldığını ve aşamalardaki gecikme farklılıklarının toplam gecikmeyi nasıl etkilediğini göstermek için bu sorunu azaltın
  3. Sistem hatasını nasıl toleranslı hale getirebileceğini göstermek, böylece hesaplama sırasında makine arızalarını otomatik olarak telafi etmek
  4. Özel faydalı uygulama seçenekleri ve optimizasyonlarının belirlenmesi

Eleştirilerin bazıları bu sınıflara giriyor:

  1. “Harita / azalt, hesaplama teorisinde yeni bir zemin oluşturmuyor.” Doğru. Orijinal makalenin katkısı, belirli bir optimizasyon setine sahip bu iyi anlaşılmış operatörlerin, gerçek sorunları bir kereye mahsus çözümlerden daha kolay ve hataya dayanıklı bir şekilde çözmek için başarıyla kullanılmasıydı.
  2. "Bu dağıtık hesaplama kolayca haritaya dönüşmez ve işlemleri azaltmaz". Yeterince adil, ama çoğu var.
  3. "Bir n harita / azaltma aşaması boru hattı, herhangi bir sonuç alınmadan önce boru hattının azaltma adımlarının sayısıyla orantılı olarak gecikme gerektirir." Muhtemelen doğru. Küçültme operatörü, tam bir çıktı üretmeden önce tüm girişini almak zorundadır.
  4. "Harita / azaltma, bu kullanım durumu için geçersizdir." Olabilir. Mühendisler parlak yeni bir çekiç bulduğunda, çiviye benzeyen bir şey aramaya meyillidirler. Bu, çekiçin belirli bir niş için iyi yapılmış bir araç olmadığı anlamına gelmez.
  5. "Harita / azalt, ilişkisel bir DB için kötü bir alternatif." Doğru. İlişkisel bir DB veri setinize ölçeklenirse, o zaman sizin için harika - seçenekleriniz vardır.

Orijinal kağıda "seminal" diyorlar, ben de yeni bir şey bekliyorum. İlk paragrafınızı anlamıyorum: açıkça bölmek ve ele geçirmek için pek çok algoritmik teknik var . MapReduce, belirli bir sorun kümesi için d & c'nin etkin bir uygulaması "sadece" ise , algoritmalarda kesinlikle seminal veya patent almaya uygun bir şey değildir (imho). Bu iyi bir sistem olmadığını söylemez. Benim eleştirimin, MapReduce'un kendisiyle (sanırım bunun için iyi olduğunu düşünüyorum) topluluk tarafından alınmasından daha az olduğuna dikkat edin.
Raphael

1
@Raphael, bence M / R bölünmüş ve bağlandığınız anlamda fethetmez. Bir algoritmanın tekrar tekrar orijinal girişin daha küçük bir alt kümesine uygulanmasını içermez. Boru hattı aşamalarının dönüşümlü olarak harita oluşturduğu ve işlemleri azalttığı bir boru hattıdır.
Mike Samuel

Huh, doğru. "Bir işçi düğümü bunu tekrar tekrar yapabilir ve çok seviyeli bir ağaç yapısına yol açabilir" diye yorumladım. bu şekilde, ama bu elbette aynı şey her seviyede olur anlamına gelmez.
Raphael

1
@ ex0du5, yapmadığı iddiaları için kınadığınızı düşünüyorum. “Pek çok sistem sınırlı programlama modelleri sağladı ve bu hesaplamaların otomatik olarak paralel hale getirilmesi için kısıtlamaları kullandı. paralel işleme sistemlerinin çoğu yalnızca daha küçük ölçeklerde uygulandı ve makine arızalarının detaylarını programlayıcıya bıraktı. ” Bu konuda Rabin ve Valiant'ın makalelerine atıfta bulunur, ancak Liskov gazetesine değil.
Mike Samuel

1
@ ex0du5, Yeterince adil. "Harita / azaltma hesaplama teorisinde yeni bir çığır açmıyor" diye düşündüm. Yeterince açıktı, ancak katkı listesini yeniden yazdım.
Mike Samuel,

21

EDIT (Mart 2014) O zamandan beri MapReduce tipi hesaplama modelleri için algoritmalar üzerinde daha fazla çalıştığımı söylemeliyim ve kendimi aşırı olumsuz hissediyorum. Aşağıda bahsettiğim Divide-Compress-Conquer tekniği şaşırtıcı derecede çok yönlüdür ve önemsiz ve ilginç olduğunu düşündüğüm algoritmaların temeli olabilir.


Mike'ın anlaşılırlık açısından çok aşağılayıcı bir cevap vereyim, ancak bir hesaplama / algoritmik teori bakış açısıyla.

O(nϵ)o(logn)

O(1)

  • Problem vakasını bölümleme (genellikle rastgele)
  • Paralel olarak her bölüm üzerinde bir miktar hesaplama yapın ve hesaplamanın sonucunu kompakt bir şekilde gösterin.
  • Kompakt olarak temsil edilen tüm alt problem çözümlerini tek bir işlemcide birleştirin ve hesaplamayı burada bitirin

nO(n)n

Şimdi, bence bu aslında bölünme ve fethetme konusunda ilginç bir büküm, büküm, bölme aşamasından sonra, alt işlemci çözümlerini tek bir işlemcinin ele geçirebilmesi için sıkıştırmanız gerektiğidir. Ancak, bu gerçekten bugüne kadar bulduğumuz tek teknik gibi görünüyor. Örneğin, seyrek bağlantı gibi seyrek grafiklerle ilgili problemlerde başarısız olur. Bunu, Flajolet ve Martin'in ustaca örnekleme algoritması, Misra ve Gries'in deterministik eşleştirme algoritması, basit çizim tekniklerinin gücü vb. Gibi yeni fikirlerin zenginliğine yol açan akış modeliyle karşılaştırın.

Bir programlama paradigması olarak, harita azaltma çok başarılı olmuştur. Haritaya ilişkin yorumlarım ilginç bir hesaplama modeli olarak azaltıyor. İyi teorik modeller biraz tuhaf. Gerçeği çok yakından takip ediyorlarsa, hantaldırlar, ancak daha da önemlisi, (makine öğrenmesinden bir terim ödünç almak için) çok spesifik olan modeller için kanıtlanmış teoremler genelleştirmez, yani başka modellerde yoktur. Bu yüzden, mümkün olduğu kadar fazla ayrıntıyı soyutlamak istiyoruz, ancak yine de yeni algoritmalar geliştirmemize meydan okuyacak kadar ayrılıyoruz. Son olarak, bu yeni fikirler sonunda gerçek dünyaya dönüş yollarını bulabilmelidir. PRAM ilginç fikirlere yol açan gerçekçi olmayan bir modeldir ancak bu fikirlerin gerçek dünya paralel hesaplamasına nadiren uygulanabilir olduğu kanıtlanmıştır. Diğer taraftan, akış aynı zamanda gerçekçi değildir. ama gerçekte gerçek dünyada kullanılan algoritmik fikirlere ilham verdi. Görmeksayım dakika çizim . Eskiz teknikleri aslında harita azaltmaya dayalı sistemlerde de kullanılmaktadır.


Muhtemelen M / R, PRAM ya da akışlardan daha gerçekçi (kullanışlı) bir modeldir. (En azından bazı büyük problemler için.)
Xodarap

"Tek bir işlemcinin ele geçirebilmesi için alt problem çözümlerini sıkıştırmanız gerekiyor" - M / R tarafından çözülebilecek sorunların, izlenebilir önbellek tanıyan veya önbellek bulunanların bir alt kümesi olduğunu söylüyor gibi görünüyorsunuz. - açık çözümler. Eğer bu doğruysa, bana öyle geliyor ki, bu ifade çoğu dağıtılmış hesaplama programına eşit derecede iyi uygulanıyor.
Mike Samuel

1
@ Xodarap iyi olabilir. Burada sadece algoritmalar teorisinin bakış açısını kullanıyorum: Yeni algoritmik perspektiflere yol açarsa bir model faydalıdır. Bu önlemle, akış tamamen gerçekçi değildir, ancak pratikte gerçekten yararlı olan birçok yeni tekniğe yol açmıştır. Mesele şu ki, yeni düşünceye yol açan doğru soyutlama nedir? mevcut MR soyutlamalarının başarıları karışık (ancak bazı başarılar, sanırım)
Sasho Nikolov

1
@MikeSamuel bu cümle içindeki "ihtiyaç", tekniğin çalışması için gereken şey olduğu anlamına gelir, yapılacak tek şey bu değildir. MR için bildiğim hiçbir teorik negatif sonuç yok. Şikayetim, MR'ın CO'dan kesinlikle daha az güçlü olmadığı değil. Bu modelden ilham alan yeni bir algoritmik düşünce görmedik (bu bir sistem için iyi, ancak bir hesaplama modeli için hayal kırıklığı yarattı). Öte yandan, önbellek bilinmezlik kendisi inanılmaz bir fikir imo
Sasho Nikolov

@SashoNikolov, Anladım. Açıkladığınız için teşekkürler.
Mike Samuel

6

Sana tamamen katılıyorum. Kavramsal açıdan bakıldığında, gerçekten yeni bir şey yok: Map / Reduce aslen Paralel Hesaplama'da veri akışı programlama modeli olarak biliniyordu. Bununla birlikte, pratik bir bakış açısına göre, Google tarafından ve daha sonra açık kaynak kodlu uygulamalarla önerildiği gibi Harita / Azaltma, Cloud Computing'i de körüklemiştir ve şimdi çok basit paralel ayrıştırma ve işleme için oldukça popülerdir. Tabii ki, karmaşık alan veya fonksiyonel ayrışma gerektiren herhangi bir şey için uygun değildir.


3

Bence yorumunuzla kafadaki tırnağa çarptınız.

Herhangi bir fonksiyonel dilde haritaların paralelleştirilebileceği doğru değildir - dil saf olmalıdır . (Haskell'in belli belirsiz ana akım tamamen işlevsel bir dil olduğuna inanıyorum. Lisp, OCaml ve Scala tamamen saf değil.)

Mühendislerin işlemcilerini ilk kez boru hattıyla donattıklarında, zaman aşımından önce bile, saf kodun faydalarını biliyoruz. Peki neden hiç kimse saf bir dil kullanmıyor?

Gerçekten, gerçekten, gerçekten zor. Saf bir dilde programlama genellikle iki elinizle arkanıza bağlı olarak programlama gibi gelir.

MR'ın yaptığı şey, saflık kısıtını bir miktar gevşetmek ve diğer parçalar için (karışık faz gibi) bir çerçeve sağlamak, büyük bir sorun bölümü için dağıtılabilir kod yazmayı oldukça kolaylaştırıyor.

NC=P


MapReduce'a aşina değilim, ancak sunumunuz, önceki yüzyılda Parallelism 101'de ideal vaka olarak sunulduğunu hatırladığımdan farklı görünmüyor.
Gilles,

@Gilles: Niyetim sadece "böl ve yönet" - = " dağıtılabilir böl ve yönet" i göstermektı. M / R daha az önemsiz olsa da, hala orijinal olmasa da.
Xodarap

İşlevsel programlamada tüm haritalar paralelleştirilebilir (kabadayı), öyleyse neden bu paradigmaya sadık kalmıyorsun? countSahte kodunuzda paylaşılan bir değişkenin nasıl olduğunu göremiyorum ; do_somethingçalışması gereken değerin basitçe geçmesi . Özyinelemeli çağrıların birbirine bağlı olduğu (çağrı yapıldıktan sonra) bir "gerçek" d & c algoritması örneği (Mergesort, Quicksort, ...) verebilir misiniz?
Raphael

@Raphael: Yorumunuzu daha iyi yanıtlamak için cevabımı yeniden yazdım. Hala istersen, saflığın ne zaman can sıkıcı olduğuna dair bir örnek ekleyebilirim.
Xodarap

1
@Raphael: Programlama zamanının M / R kullanarak X saatinden Y'ye düştüğünü ya da saflığı zorlayarak A'dan B'ye kadar arttığını gösteren bir yazıyı alıntılayabilirsem cevabımın daha iyi olacağına katılıyorum. ellerimi öfkeyle el sallamak ve farklılıkların önemsiz olmaları konusunda ısrar ediyor.
Xodarap
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.