Hadoop'ta azaltma görevleri ne zaman başlar?


82

Hadoop'ta azaltma görevleri ne zaman başlar? Haritacıların belirli bir yüzdesi (eşiği) tamamlandıktan sonra mı başlıyorlar? Öyleyse, bu eşik sabit mi? Tipik olarak ne tür bir eşik kullanılır?

Yanıtlar:


206

Azaltma aşamasının 3 adımı vardır: karıştırma, sıralama, azaltma. Karıştırma, verilerin indirgeyici tarafından her eşleştiriciden toplandığı yerdir. Bu, yalnızca bir veri aktarımı olduğu için haritacılar veri üretirken gerçekleşebilir. Öte yandan, sıralama ve küçültme yalnızca tüm eşleyiciler tamamlandıktan sonra başlayabilir. İndirgeyici tamamlanma yüzdesine bakarak MapReduce'un hangisini yaptığını anlayabilirsiniz:% 0-33, karıştırma yapıyor,% 34-66 sıralama,% 67 -% 100 azalma anlamına gelir. Bu nedenle, düşürücüleriniz bazen% 33 oranında "takılı" görünecektir - haritacıların bitirmesini bekliyor.

İndirgeyiciler, biten haritacıların yüzde eşiğine göre karıştırmaya başlar. Redüktörlerin er ya da geç başlaması için parametreyi değiştirebilirsiniz.

Redüktörleri erken başlatmak neden iyi bir şeydir? Zamanla haritacılardan indirgeyicilere veri aktarımını yaydığı için, ağınız darboğazsa bu iyi bir şeydir.

Redüktörleri erken başlatmak neden kötü bir şey? Çünkü yalnızca verileri kopyalarken ve haritacıların bitirmesini beklerken yuvaları "karıştırırlar". Daha sonra başlayan ve aslında azaltma yuvalarını kullanan başka bir iş artık bunları kullanamaz.

Reducers varsayılan değerini değiştirerek başlangıç zaman özelleştirebilirsiniz mapred.reduce.slowstart.completed.mapsiçinde mapred-site.xml. 1.00Redüktörleri başlatmadan önce tüm haritacıların bitmesini bekleyecek bir değer . Bir değer 0.0redüktörleri hemen başlatır. Değeri 0.5haritacıları yarısı tamamlandığında düşürücüler başlayacaktır. mapred.reduce.slowstart.completed.mapsİş bazında da değiştirebilirsiniz . Hadoop'un yeni sürümlerinde (en az 2.4.1) parametre denirmapreduce.job.reduce.slowstart.completedmaps (teşekkürler user yegor256).

Tipik olarak, sistemde aynı anda birden fazla iş çalıştırılırsa mapred.reduce.slowstart.completed.mapsyukarıda kalmayı severim 0.9. Bu şekilde, veri kopyalamaktan başka bir şey yapmadıklarında, iş indirgeyicileri zorlamaz. Bir seferde yalnızca bir işiniz varsa, yapmak 0.1muhtemelen uygun olacaktır.


3
Bahsettikleriniz hakkında nereden daha fazla okuyabilirim biliyor musunuz?
daydreamer

1
Yavaş başlangıç ​​bence oldukça zayıf bir şekilde belgelenmiştir .... belirsiz yapılandırma parametrelerinin çoğu gibi.
Donald Miner

5
İyi cevap @Donald Miner. Bunu daha yeni Hadoop sürümünde eklemek istiyorum (1.1.2 kullanıyorum), değer varsayılan olarak 0,05 olarak ayarlanmıştır. hadoop.apache.org/docs/r1.1.2/mapred-default.html
sufinawaz

@Donald hadoop'un 0.20.205.0 sürümünü kullanıyorum ve mapred-site.xml'deki "mapred.reduce.slowstart.completed.maps" parametresini 0.1 olarak ayarlıyorum, ancak eşleştiriciler tamamlandıktan sonra düşürücü hala çalışıyor. Nedenini öğrenebilir miyim?
harry potter

3
@nishm, tüm azaltma aşamasının terminolojisini karıştırdığınızı düşünüyorum. Azaltma aşaması, karıştırma, sıralama ve azaltmadır. Yavaş başlangıç, genel aşamaya ne zaman başlanacağını söyler. Azaltma aşamasının içindeki azaltma işleminin ancak haritacılar bittikten sonra başlayacağı konusunda haklısınız.
Donald Miner

5

İndirgeme aşaması, bir redüktör çağrılmadan çok önce başlayabilir. "Bir" eşleştirici işi bitirir bitirmez, üretilen veriler bir miktar sıralama ve karıştırmaya (birleştirici ve bölümleyiciye çağrı içerir) geçer. İndirgeyici "aşama", eşleştirici sonrası veri işlemenin başladığı anda başlar. Bu işlemler yapıldıkça, indirgeyici yüzdesinde ilerleme göreceksiniz. Ancak, redüktörlerin hiçbiri henüz çağrılmadı. Mevcut / kullanılan işlemci sayısına, verilerin niteliğine ve beklenen azaltıcı sayısına bağlı olarak, yukarıda @ Donald-miner tarafından açıklandığı gibi parametreyi değiştirmek isteyebilirsiniz.


1

Anladığım kadarıyla Azaltma aşaması harita aşamasıyla başlıyor ve haritalardaki kayıtları tüketmeye devam ediyor. Ancak, harita aşamasından sonra sıralama ve karıştırma aşaması olduğu için, tüm çıktıların sıralanması ve indirgeyiciye gönderilmesi gerekir. Dolayısıyla mantıksal olarak, azaltma aşamasının yalnızca harita aşamasından sonra başladığını, ancak aslında performans nedeniyle düşürücüler de eşleyicilerle başlatıldığını hayal edebilirsiniz.


0

İndirgeme aşaması için gösterilen yüzde, aslında haritaların çıktısından indirgeyici girdi dizinlerine kopyalanan verilerin miktarı ile ilgilidir. Bu kopyalamanın ne zaman başlayacağını bilmek için? Donald'ın yukarıda gösterdiği gibi ayarlayabileceğiniz bir konfigürasyondur. Tüm veriler indirgeyicilere kopyalandığında (yani% 100 azaltma), bu, indirgeyicilerin çalışmaya başladığı andır ve bu nedenle, indirgeyici kodunuz G / Ç veya CPU yoğunsa "% 100 azalma" ile donabilir.


0

Azaltma, yalnızca tüm eşleyici orada görevi yakaladıktan sonra başlar, Reducer tüm eşleyicilerle iletişim kurmak zorundadır, böylece son eşleştiricinin görevini bitirmesini beklemesi gerekir. Ancak eşleyici, görevini tamamladığı ana kadar verileri aktarmaya başlar.


-1

Haritanın azaltma görevinin nasıl çalıştığını daha iyi anlamak için bir WordCount örneğini düşünün. Büyük bir dosyamız olduğunu varsayalım, örneğin bir roman ve görevimiz dosyada her kelimenin kaç kez geçtiğini bulmaktır. Dosya büyük olduğu için farklı bloklara bölünebilir ve farklı çalışan düğümlerinde çoğaltılabilir. Kelime sayımı işi, harita ve azaltma görevlerinden oluşur. Harita görevi her bloğu girdi olarak alır ve bir ara anahtar-değer çifti oluşturur. Bu örnekte, kelimelerin geçtiği sayıları saydığımız için, bir bloğu işlerken eşleyici formun (kelime1, say1), (kelime2, sayı2) vb. Ara sonuçlarına yol açar. Tüm eşleyicilerin ara sonuçları ara sonucu yeniden sıralayacak bir karıştırma aşamasından geçti.

Farklı haritacılardan elde ettiğimiz harita çıktımızın aşağıdaki biçimde olduğunu varsayalım:

Harita 1: - (eşittir, 24) (eski, 32) (ve, 12)

Harita2: - (benim, 12) (is, 23) (oldu, 30)

Harita çıktıları, aynı anahtar değerleri aynı indirgeyiciye verilecek şekilde sıralanır. Burada şuna karşılık gelen anahtarların aynı redüktöre gittiği anlamına gelir. Son çıktıyı üreten redüktördür, bu durumda şu olur: - (ve, 12) (is, 47) (my, 12 ) (idi, 62)


OP'nin redüktör NE ZAMAN başlar sorusuna cevap vermez.
Sai Kiriti Badam

-1

İndirgeyici görevleri yalnızca completiontüm haritacılardan sonra başlar .

Ancak veri aktarımı Harita'dan sonra gerçekleşir each. Aslında bu bir çekme operasyonudur.

Bu, her seferinde indirgeyici her harita görevine, Haritadan geri çekilecek bazı verileri olup olmadığını soracak demektir. Herhangi bir eşleyicinin görevini tamamladığını görürlerse, Reducer ara verileri çeker.

Mapper'dan gelen ara veriler, içinde saklanır disk. Ve Eşleştiriciden Azalt'a veri aktarımı Ağ üzerinden gerçekleşir ( Data LocalityAzaltma aşamasında korunmaz)


-2

Mapper görevini bitirdiğinde, Reducer Verileri Azaltma işine başlar, bu Mapreduce işidir.

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.