Map Reduce Programming'de redüktörde karıştırma ve sıralama aşamasının amacı nedir?


113

Harita Azaltma programlamasında, azaltma aşamasının alt parçaları olarak karıştırma, sıralama ve azaltma vardır. Sıralama maliyetli bir meseledir.

Map Reduce Programming'de redüktörde karıştırma ve sıralama aşamasının amacı nedir?


3
Eşleştiriciden gelen çıktı indirgeyici için girdi olduğundan bunun gerekli olduğunu her zaman varsaydım, bu nedenle anahtar boşluğuna göre sıralandı ve ardından her düşürücü girdisi için kovalara bölündü.
BasicHorizon

Yanıtlar:


171

Her şeyden önce shuffling, eşleştiricilerden indirgeyicilere veri aktarma işlemidir, bu nedenle indirgeyiciler için gerekli olduğu aşikardır, çünkü aksi takdirde herhangi bir girdiye (veya her eşleyiciden girdi) sahip olamazlar. . Karıştırma, biraz zaman kazanmak için harita aşaması bitmeden başlayabilir. Bu nedenle, harita durumu henüz% 100 olmadığında% 0'dan büyük (ancak% 33'ten az) bir azalma durumu görebilirsiniz.

Sortingİndirgeyici için zaman kazandırarak, yeni bir küçültme görevinin ne zaman başlaması gerektiğini kolayca ayırt etmesine yardımcı olur. Basitçe söylemek gerekirse, sıralanan giriş verilerindeki bir sonraki tuş öncekinden farklı olduğunda yeni bir azaltma görevi başlatır. Her azaltma görevi anahtar-değer çiftlerinin bir listesini alır, ancak bir anahtar listesi (değer) girdisi alan indirgeme () yöntemini çağırması gerekir, bu nedenle değerleri anahtara göre gruplaması gerekir. Giriş verileri harita aşamasında önceden sıralanırsa (yerel olarak) ve azaltma aşamasında basitçe birleştirilirse (indirgeyiciler birçok haritacıdan veri aldığından) bunu yapmak kolaydır.

PartitioningCevaplardan birinde bahsettiğiniz, farklı bir süreçtir. Harita fazının çıktısının hangi redüktörde (anahtar, değer) çiftinin gönderileceğini belirler. Varsayılan Bölümleyici, anahtarları azaltma görevlerine dağıtmak için anahtarlar üzerinde bir karma kullanır, ancak bunu geçersiz kılabilir ve kendi özel Bölümleyicinizi kullanabilirsiniz.

Bu adımlar için harika bir bilgi kaynağı, bu Yahoo eğitimidir .

Bunun güzel bir grafik temsili şudur (karıştırma, bu şekilde "kopya" olarak adlandırılır):

görüntü açıklamasını buraya girin

Sıfır indirgeyicileri belirtirseniz (setNumReduceTasks (0)) bunu shufflingve sortinghiç gerçekleştirilmediğini unutmayın . Ardından, MapReduce işi harita aşamasında durur ve harita aşaması herhangi bir sıralama içermez (böylece harita aşaması bile daha hızlıdır).

GÜNCELLEME: Daha resmi bir şey aradığınız için Tom White'ın "Hadoop: The Definitive Guide" kitabını da okuyabilirsiniz. İşte sorunuzun ilginç kısmı.
Tom White, Şubat 2007'den beri Apache Hadoop üyesi ve Apache Software Foundation'ın bir üyesi, bu yüzden sanırım oldukça güvenilir ve resmi ...


"Sıralama, indirgeyici için zaman kazandırır ve yeni bir azaltma görevinin ne zaman başlaması gerektiğini kolayca ayırt etmesine yardımcı olur. Basitçe söylemek gerekirse, sıralanan giriş verilerindeki bir sonraki tuş öncekinden farklı olduğunda yeni bir azaltma görevini başlatır." Bu kısmı anlamıyorum. Mapper, dökülmeleri yerel olarak bölümlere ayırmak için bir bölümleyici kullanır, her bölüm daha sonra bir azaltmaya gönderilir. Sıralama burada nasıl yardımcı olur?
MaxNevermind

1
@MaxNevermind Eğer x azaltılmış görevleriniz (bölümler) varsa, bu, indirgeme () yöntemini x kez çağıracağınız anlamına gelmez. Her farklı anahtar için bir kez çağrılacaktır. Dolayısıyla, bir azaltma görevi, düşürme () yöntemini birkaç kez çağırabilir.
vefthym

"Her farklı anahtar için bir kez çağrılacak" Neden? Mapper, dilediği şekilde bölümleri oluşturur (her farklı anahtar için bir bölüm gerekli değildir), sonra her bölüm indirgeyiciye gider, yanlış mı?
MaxNevermind

1
@MaxNevermind Mapper anahtarları ve değerleri çıkarır, bölümler oluşturmaz. Bölümler, kullanıcının tanımladığı azaltma görevlerinin sayısı ve Partitioner uygulaması ile tanımlanır. Aynı anahtara sahip tüm Eşleştiricilerin çıktıları aynı azaltma () yöntemine gider. Bu değiştirilemez. Ama ne olabilir değiştirilemez diğer anahtarlar (varsa) aynı bölüme yerleştirilecek ve böylece aynı göreve tarafından ele alınacaktır şeydir. Bir azaltma görevi, azaltma () işlevini birden çok kez çağırabilir, ancak her anahtar için yalnızca bir kez.
vefthym

2
tamam sanırım anladım Benim sorunum, azaltmanın yalnızca bir anahtar / değer çifti değil, bağımsız değişken olarak bir değer listesi aldığını unutmamdı. Sanırım cevabınızda şunu detaylandırmalısınız: "Her azaltma görevi, anahtar-değer çiftlerinin bir listesini alır, ancak bir anahtar-Liste <value> alan azaltma yöntemini çağırmak zorundadır, bu nedenle değerleri anahtara göre gruplamak zorundadır, bu kolaydır giriş verileri bir eşleyici aşamasında önceden sıralanmışsa yapılacak "
MaxNevermind

42

Mapreduce programının temel aşamalarını tekrar gözden geçirelim.

Harita faz haritacılar tarafından yapılır. Eşleştiriciler , sıralanmamış giriş anahtar / değer çiftlerinde çalışır. Her eşleyici, her giriş anahtar / değer çifti için sıfır, bir veya birden çok çıkış anahtarı / değer çifti yayar.

Birleştirmek faz birleştiriciler tarafından yapılır. Birleştirici aynı anahtarla anahtar / değer çiftlerini birleştirmek gerekir. Her birleştirici sıfır, bir veya birden çok kez çalışabilir.

Karıştır ve sıralama faz çerçevesinde yapılır. Tüm haritacılardan gelen veriler anahtara göre gruplandırılır, indirgeyiciler arasında bölünür ve anahtara göre sıralanır. Her indirgeyici, aynı anahtarla ilişkili tüm değerleri alır. Programcı, sıralama için özel karşılaştırma işlevleri ve veri bölme için bir bölümleyici sağlayabilir.

Partitioner düşürücü belirli bir anahtar değeri çift alacak karar verir.

Redüktör elde eder, tuş / [değerler listesi] çiftleri kriteri anahtar tarafından kriteri. Değer listesi, eşleyiciler tarafından üretilen aynı anahtara sahip tüm değerleri içerir. Her indirgeyici, her bir giriş anahtarı / değer çifti için sıfır, bir veya birden fazla çıkış anahtarı / değer çifti yayar .

Daha iyi bir anlayış için Maria Jurcovicova tarafından yazılan bu javacodegeeks makalesine ve Datta'nın mssqltips makalesine bir göz atın

Safaribooksonline makalesinden görüntü aşağıdadır

görüntü açıklamasını buraya girin


Sanırım görüntüde bir yazım hatası var (anladığım kadarıyla burada kopyalandı). İnanıyorum ieRedüktörler ve Çıktı altında dizeleri aslında olmalıdır is.
Jeff Evans

32

Yukarıdaki cevaplarda eksik olan bazı noktaları eklemeyi düşündüm. Buradan alınan bu diyagram , gerçekte neler olup bittiğini açıkça ifade ediyor.

görüntü açıklamasını buraya girin

Tekrar söylersem gerçek amacını

  • Bölme: İşlem yükünü farklı düğümlere (Eşleştiriciler) dağıtarak paralel işlemi iyileştirir, bu da genel işlem süresinden tasarruf sağlar.

  • Birleştir: Her Eşleştiricinin çıktısını küçültür. Verileri bir düğümden diğerine taşımak için harcanan zamandan tasarruf sağlar.

  • Sırala (Karıştır ve Sırala): Çalışma zamanının yeni indirgeyicileri planlamasını (üretme / başlatma) kolaylaştırır; burada sıralanan öğe listesinde geçerken, mevcut anahtar öncekinden farklı olduğunda, yeni bir düşürücü üretebilir .


Bölme adımı bu grafiğe nerede girecek? Haritadan sonra ve birleştirmeden önce?
Joel

@Joel Umarım 'bölünmüş' adıma başvurursunuz?
Supun Wijerathne

Hayır, bölme adımını kastediyorum, varsayılan olarak basit bir hash modulo kullanarak veriyi hangi redüktöre göndereceğine karar veriyor, biraz daha araştırmadan sonra, birleştirme adımından sonra, karıştırma ve sıralamadan önce geldiğine inanıyorum.
Joel

1
@Joel Neyi tarif etmeyi planladığınız konusunda pek net değilim. Özetle, adımların tam sırası hemen hemen probleme özel olabilir. Bazı senaryolar için sıralamanın bile gerekli olmadığını söyleyebilirim. Girişinize geri dönersek, yukarıdaki basit kelime sayısı örneğinden özellikle bahsedersem, indirgeyicilere karar vermek için böyle bir bölümlemeye gerçekten gerek görmüyorum. Burada, anahtar başına indirimlerin çıkması oldukça basittir. Ancak düşüncenizin bazı senaryolar için geçerli olabileceğini tahmin edebilirim. Açıkçası bu konuda net bir fikrim yok.
Supun Wijerathne

4

Bazı veri işleme gereksinimlerinin sıralanması gerekmez. Syncsort, Hadoop'taki sıralamayı takılabilir hale getirdi. İşte onlardan sıralama üzerine güzel bir blog. Eşleştiricilerden indirgeyicilere veri taşıma işlemine karıştırma adı verilir , aynı konuda daha fazla bilgi için bu makaleye bakın.


2

Eşleştiriciden gelen çıktı indirgeyici için girdi olduğundan bunun gerekli olduğunu her zaman varsaydım, bu nedenle anahtar boşluğuna göre sıralandı ve ardından her düşürücü girdisi için kovalara bölündü. Bir Anahtarın tüm aynı değerlerinin, aynı kovaya girerek redüktöre gitmesini ve böylece birlikte azaltılmasını sağlamak istiyorsunuz. K1, V2 ve K1, V4'ü indirgemek için bir arada olmaları gerektiğinden farklı redüktörlere göndermenin bir anlamı yoktur.

Olabildiğince basit bir şekilde açıklamaya çalıştım


K1, v1 ve k1, v4'ü aynı redüktöre göndermek istiyorsak karıştırma yapabiliriz. o zaman sıralamanın amacı nedir?
Nithin K Anil

Birden fazla nedenden ötürü sıralama yapar, bunun bir nedeni, bir MapReduce İşinin tüm KV çiftlerini, eğer giriş sıralanmamışsa bir indirgeyiciye göndermesidir.K1, VX'in her örneğini almak için tüm Eşleyici çıkışlarını taraması gerekir. . Eşleştirici çıktısı K2 olur olmaz sıralanırsa, VX alınırsa, tüm K1, VX'in toplandığını ve bu setin işlenmek üzere bir redüktöre gönderilebileceğini bilirsiniz, bunun yararı, bunu yapmamanızdır. her birinin küçülmeye başlaması için her redüktörün hazır olmasını beklemek zorunda.
BasicHorizon

Ayrıca, toplama söz konusu olduğunda, K1, V1'in tamamını Toplamak istediğinizi belirtirseniz, redüktör K2, V2'yi alır almaz redüktör girdisi sıralanırsa, artık K1, V1 örneğinin olmadığını bilir, dolayısıyla
Birleştirmeyi

2

Karıştırma, haritacılardan gelen ara verilerin 0,1 veya daha fazla indirgeyiciye aktarıldığı süreçtir. Her bir redüktör, redüktör sayısına bağlı olarak (dengeli bir yük için) 1 veya daha fazla anahtar ve bunlarla ilgili değerleri alır. Ayrıca, her bir anahtarla ilişkili değerler yerel olarak sıralanır.


0

MapReduce'un DOĞAL OLARAK yaptığı sadece iki şey vardır: Sıralama ve ölçeklenebilir GroupBy (sıralamaya göre uygulanır).

MapReduce üzerindeki uygulamaların ve Tasarım Modellerinin çoğu, karıştırma ve sıralama ile sağlanan bu iki işlem üzerine inşa edilmiştir.


0

Bu iyi bir okuma. Umarım yardımcı olur. İlgilendiğiniz sıralama açısından, Harita'nın son adımındaki birleştirme işlemi için olduğunu düşünüyorum. Harita işlemi yapıldığında ve sonucun yerel diske yazılması gerektiğinde, tampondan oluşturulan bölmelerde çoklu birleştirme çalıştırılacaktır. Ve bir birleştirme işlemi için, her bölümü gelişmiş olarak sıralamak yararlıdır.


0

Peki, Mapreduce'da Mapper ve indirgeyici olarak adlandırılan iki önemli söz vardır, ikisi de çok önemlidir, ancak Reducer zorunludur. Bazı programlarda indirgeyiciler isteğe bağlıdır. Şimdi sorunuza gelin. Karıştırma ve sıralama, Mapreduce'ta iki önemli işlemdir. İlk Hadoop çerçevesi, yapılandırılmış / yapılandırılmamış verileri alır ve verileri Anahtar, Değer olarak ayırır.

Şimdi Mapper programı, verileri işlenecek anahtarlara ve değerlere ayırır ve düzenler. Anahtar 2 ve değer 2 değerleri oluşturun. Bu değerler, istenen çözümü elde etmek için uygun şekilde işlenmeli ve yeniden düzenlenmelidir. Şimdi bu karıştırma ve sıralama yerel sisteminizde yapılır (Çerçeve bunu dikkate alır) ve işlem çerçevesi yerel sistemdeki verileri temizledikten sonra yerel sistemde işler. Tamam

Burada, bu karıştırma ve sıralama sürecini optimize etmek için birleştirici ve bölmeyi de kullanıyoruz. Uygun düzenlemeden sonra, bu anahtar değerler, istenen Müşterinin çıktısını almak için Redüktör'e geçer. Son olarak Redüktör istenilen çıktıyı elde eder.

K1, V1 -> K2, V2 (Program Mapper yazacağız), -> K2, V '(burada verileri karıştırın ve yumuşak yapın) -> K3, V3 Çıkışı oluşturun. K4, V4.

Lütfen tüm bu adımların yalnızca mantıksal işlem olduğunu, orijinal verileri değiştirmediğini unutmayın.

Sorunuz: Map Reduce Programming'de redüktörde karıştırma ve sıralama aşamasının amacı nedir?

Kısa cevap: İstenilen çıktıyı elde etmek için verileri işlemek. Karıştırma, verilerin toplanmasıdır, azalma beklenen çıktı elde edilir.

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.