MapReduce sıralama algoritması nasıl çalışır?


110

MapReduce'un gücünü göstermede kullanılan ana örneklerden biri Terasort karşılaştırmasıdır . MapReduce ortamında kullanılan sıralama algoritmasının temellerini anlamakta güçlük çekiyorum.

Bana göre sıralama, basitçe bir öğenin diğer tüm öğelerle olan göreceli konumunu belirlemeyi içerir. Yani sıralama, "her şeyi" "her şey" ile karşılaştırmayı içerir. Ortalama sıralama algoritmanız (hızlı, kabarcık, ...) bunu basitçe akıllıca yapar.

Aklımda, veri setini birçok parçaya bölmek, tek bir parçayı sıralayabileceğiniz ve ardından bu parçaları 'tam' tamamen sıralanmış veri kümesine entegre etmeniz gerektiği anlamına geliyor. Binlerce sisteme dağıtılan terabayt veri kümesi göz önüne alındığında, bunun çok büyük bir görev olmasını bekliyorum.

Peki bu gerçekten nasıl yapılır? Bu MapReduce sıralama algoritması nasıl çalışır?

Anlamama yardım ettiğin için teşekkürler.

Yanıtlar:


62

Hadoop'un Terasort uygulamasıyla ilgili bazı ayrıntılar :

TeraSort, her bir azaltma için anahtar aralığını tanımlayan N - 1 örneklenmiş anahtarların sıralı bir listesini kullanan özel bir bölümleyici dışında, standart bir eşleme / küçültme sıralamasıdır. Özellikle, örnek [i - 1] <= anahtar <örnek [i] gibi tüm anahtarlar i'yi azaltmak için gönderilir. Bu, indirgeme i'nin çıktısının, indirgeme i + 1'in çıktısından daha az olmasını garanti eder. "

Yani hileleri, harita aşamasında anahtarları belirleme biçimindedir. Esasen, tek bir redüktördeki her değerin diğer tüm redüktörlere karşı 'önceden sınıflandırılmasının' garantili olmasını sağlarlar.

Kağıt referansını James Hamilton'un Blog Yazısında buldum .


3

Google Referansı: MapReduce: Büyük Kümelerde Basitleştirilmiş Veri İşleme

Göründü :
OSDI'04: Altıncı Sempozyumu İşletim Sistemi Tasarımı ve Uygulaması, üzerinde
San Francisco, CA, Aralık 2004.

Bu bağlantının bir PDF ve HTML-Slayt referansı vardır.

Ayrıca uygulama referanslarının bulunduğu bir Wikipedia sayfası da bulunmaktadır .

Ayrıca eleştiri,

Paralel veritabanlarında öncü uzmanlar olan ve hiçbir mimariyi paylaşmayan David DeWitt ve Michael Stonebraker, MapReduce'un kullanılabileceği sorunların genişliği hakkında bazı tartışmalı iddialarda bulundular. Arayüzünü çok düşük seviyeli olarak adlandırdılar ve savunucularının iddia ettiği paradigma değişikliğini gerçekten temsil edip etmediğini sorguladılar. MapReduce savunucularının yenilik iddialarına karşı çıkıyorlar, Teradata'yı yirmi yıldan fazla bir süredir var olan önceki tekniğin bir örneği olarak gösteriyorlar; MapReduce programcılarını Codasyl programcılarıyla karşılaştırdılar, her ikisinin de "düşük seviyeli kayıt manipülasyonu gerçekleştiren düşük seviyeli bir dilde yazdığını" belirttiler. MapReduce'un girdi dosyalarını kullanması ve şema desteğinin olmaması, B-tree ve hash bölümleme gibi yaygın veritabanı sistemi özelliklerinin sağladığı performans iyileştirmelerini engeller,


Belirtilen belgelerde açıklandığı gibi MapReduce kavramlarını (çoğu) anlıyorum. Sıralama algoritmasını anlamaya çalışıyorum.
Niels Basjes

1

Google'ın MapReduce makalesini okurken de aynı soruyu sormuştum. @Yuval F 'ın cevabı hemen hemen benim bulmacayı çözdü.

Kağıdı okurken fark ettiğim bir şey, sihrin bölümlemede gerçekleşmesidir (haritadan sonra, azaltmadan önce).

Kağıt hash(key) mod R, bölümleme örneği olarak kullanılıyor, ancak bu, ara verileri farklı azaltma görevlerine bölümlemenin tek yolu değil.

Sadece için sınır koşullar eklemek @Yuval F 'ın cevabı yapmak tamamlanmadan: varsayalım dakika (S) ve max (S) örneklenmiş tuşları arasında asgari tuşu ve maksimum anahtarıdır; tüm anahtarlar <min (S) bir azaltma görevine bölünmüştür; tersi, tüm> = max (S) anahtarları bir azaltma görevine bölünmüştür.

Örneklenen tuşlarda min veya maks gibi katı bir sınırlama yoktur. Sadece, tüm anahtarlar arasında daha eşit olarak dağıtılan bu R anahtarları, bu dağıtılmış sistem daha "paraleldir" ve bir azaltma operatörünün bellek taşması sorunu yaşama olasılığı daha düşüktür.


0

Sadece tahmin ediyorum...

Büyük bir veri kümesi verildiğinde, verileri paralel olarak işlenmek üzere bazı parçalara bölersiniz (belki kayıt numarasına göre, yani kayıt 1 - 1000 = bölüm 1 vb.).

Her bölümü kümedeki belirli bir düğüme atayın / planlayın.

Her küme düğümü, bölümü, belki de anahtar alfabetik sıraya göre, kendi mini bölümüne daha da böler (eşler). Öyleyse, 1. bölümde, bana A ile başlayan her şeyi al ve onu x'in A mini bölümüne çıkar. Halihazırda bir A (x) varsa yeni bir A (x) oluşturun. X'i ardışık sayı ile değiştirin (belki de bunu yapmak için planlayıcı iş budur). Yani bana bir sonraki A (x) benzersiz kimliği ver.

Eşleştirici tarafından tamamlanan işleri (zamanlama) (önceki adım) "azalt" küme düğümlerine devredin. Düğüm kümesini azaltın, daha sonra, tüm eşleyici görevleri tamamlandığında tek başına gerçekleşecek olan her bir A (x) parçasının türünü daha da hassaslaştıracaktır (Hala olasılık varsa, w / A ile başlayan tüm sözcükleri sıralamaya başlayamıyorum) yapım aşamasında başka bir mini bölüm olacak). Son sıralanan bölümde (yani Sıralanmış-A, Sıralanmış-B, vb.) Sonucu çıktılar.

Tamamlandığında, sıralanan bölümü tekrar tek bir veri kümesinde birleştirin. Bu noktada, bu sadece n dosyanın basit bir birleşimidir (burada sadece A - Z yapıyorsanız n 26 olabilir), vb.

Arada ara adımlar olabilir ... Emin değilim :). İlk azaltma adımından sonra daha fazla haritalayın ve azaltın.

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.