2016-03-29 14 views
0

Hedef: her düğüm, matrisin bir kopyasını sahip, matris okur eşleyicisinde (matrisin, anahtar) üzerinden bazı değerini hesaplar ve < anahtar, değerini yayar >Hadoop'un MapReduce Akışında bölünmüş büyüklük bir çizgiye eşit olarak nasıl ayarlanır?

Ben, mapper kullanmaya çalışıyor akış yoluyla pythonda yazılmıştır. Redüktör yoktur. Ben bir giriş dosyası aşağıdaki biçimde (görevler) (sadece başvuru için başlık) oluşturulan: Esasen, ben https://hadoop.apache.org/docs/current/hadoop-streaming/HadoopStreaming.html#How_do_I_process_files_one_per_map

Yaklaşım benzer görevi yapmaya çalışıyorum Sonra

/path/matrix.csv 0 
/path/matrix.csv 0 
...    99 

Ben Bu görevler üzerinde koş (mapa streaming) mapper. Mapper argümanları almak için satırı ayrıştırır - dosya adı, anahtar; daha sonra mapper, matrisi dosya adına göre okur ve anahtarla ilişkili değeri hesaplar; daha sonra < anahtarını, > değerini verir.

Sorun: akım yaklaşım çalışır ve, doğru sonuçlar üretir ama giriş dosya boyutu metnin 100 satır sadece dolayısıyla, bir eşleştiricisindeki yapar ve birkaç haritacılarımızdan ayrılır almıyor.Küçük giriş boyutuna rağmen bu bölünmeyi nasıl zorlayabilirim?

+0

Neden ihtiyacın var? Kararını haritacıların sayısına göre çerçeveye bırakalım. –

+0

Lütfen sorun bildirimini tekrar okuyun. Girişim küçük olmalı, çünkü sadece bir dosya yolu ve anahtar içeriyor. Dosya büyük olurdu, ancak her makinenin hafızasına uyuyor. Bu yüzden aynı veride farklı anahtarlarla birçok makinede paralel çalışmam gerekiyor. – alexsalo

cevap

0

Birkaç haritacı ve redüktör yerine, tam tersini yapabileceğimi fark ettim.

  • ince mapper basitçe giriş parametrelerini okur ve anahtar yayar
  • şişman düşürücüler dosyalarını okumak ve alınan anahtarla algoritması yürütmek, ardından sonuçlar
  • seti -D mapreduce yayarlar değeri, şu şekildedir: Şimdi benim mimarisidir .job.reduces = 10 paralelleştirme seviyesini değiştirmek için

Bu aptalca (yanlış) bir yaklaşımdı, ama doğru olanı da belli değildi.

İlgili konular