Hadoop 0.20'de büyük dosyalarda, tek seferde çalışması gereken bir iş var. (Dosya tabanlı verileri MapReduce için daha uygun, daha temiz, çizgi tabanlı bir formatta almak için bir ön işlem adımıdır.)Sıfır Redüktörler kullanırken Hadoop'tan bireysel olarak sıralanmış Mapper çıktılarını alabilir miyim?
Kaç tane çıktı dosyanız olduğunu bilmiyorum, ancak her bir haritanın çıkışı en fazla bir çıktı dosyasında ve her çıktı dosyası sıralanmalıdır. Ben numReducers = 0 ile çalıştırırsanız
- , hızlı çalıştığından ve her Mapper gayet kendi çıkış dosyası dışarı yazar - ancak dosyalar sıralanır.
- Bir redüktör (düz Reducer.class) eklerseniz, bu, tek bir dosyaya gereksiz bir genel sıralama adımı ekler (bu, Harita görevlerinden çok daha uzun sürer).
- Birden fazla redüktör eklerseniz, tekil harita işlerinin sonuçları birbirine karışır, böylece bir Haritanın çıktısı birden çok dosyada biter.
Hadoop'u, Reducers kullanmadan veya yavaş küresel birleşmeyi atlamadan başka bir yol kullanmadan, her işin çıktılarında bir harita tarafı sıralaması yapmaya ikna etmenin bir yolu var mı?
"job.setCombinerClass (Reducer.class)" var. Redüktörler sıfır olduğunda etkili olmaz. Mapper.java adresinden:
İşin sıfır değeri azalırsa,
Yani bu sorunu çözecek veya başka yollarla aynı etkiyi elde etmek için bir yol var mı soruyorum varsayalım. –Mapper
'un çıktısı doğrudan OutputFormat'a anahtarlarla ayırmadan yazılır.Çok yazık. Yani, harita oluşturucunun 'map' çağrısında değil çıktı şey olabilir, ama sadece bellekte toplanacak değerleri (bu çok büyük almaz emin olmak için yeterli haritacıları kullanın) saklamak. Sonra 'temizleme' çağrısında değerleri kendiniz sıralayın ve çıktı alın. –
Evet - sanırım haritalama başına bellek sorun olsa da, oraya kendim koymam gerekecek ... Giriş için teşekkürler. –