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?
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?
Yanıtlar:
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.
Partitioning
Cevaplardan 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):
Sıfır indirgeyicileri belirtirseniz (setNumReduceTasks (0)) bunu shuffling
ve sorting
hiç 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 ...
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
ie
Redüktörler ve Çıktı altında dizeleri aslında olmalıdır is
.
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.
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 .
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
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.
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.
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.
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.