Ben hadoop dünyasında çok yeni ve tek bir basit görev elde etmek için uğraşıyordum. Kimse bana sadece harita kullanarak kod sayısı tekniği kullanarak en iyi n değerlerini nasıl elde edeceğimi söyler misiniz? Bu basit görev için herhangi bir hadoop komutunu kullanmak istiyorum. Herhangi bir fikir veya öneri gerçekten yardımcı olacaktır. Teşekkürler.Hadoop tarafından en iyi N değerleri Harita Kodu azalt
cevap
İki bariz seçenek vardır:
- WordCount: sayımlarını tüm kelimeler (hemen hemen örnek tam olarak)
- TopN:
iki MapReduce işleri var bir MapReduce iş o bir şeyin en üst noktasını bulur (burada bazı örnekler verilmiştir: source code, blog post)
WordCount'ın çıktısının HDFS'ye yazmasını sağlayın. Ardından, TopN bu çıkışı okudu. Buna iş zincirleme denir ve bu sorunu çözmek için bir çok yol vardır: oozie, bash betikleri, sürücünüzden iki işi ateşleme, vb.
İki işe ihtiyaç duymanızın sebebi, iki topluluğunuz var: kelime sayısı ve ikincisi topN. Genellikle MapReduce'ta her bir toplama kendi MapReduce işini gerektirir.
Önce, WordCount işinizin verilerinde çalışmasını sağlayın. Ardından, üst N'yi çıkarmak için biraz bash kullanın.
hadoop fs -cat /output/of/wordcount/part* | sort -n -k2 -r | head -n20
sort -n -k2 -r
head -n20
en üst yirmi çeker.
Bu, WordCount için daha iyi bir seçenek, çünkü WordCount muhtemelen sadece binlerce veya on binlerce satırlık sırayla çıkacak ve bunun için bir MapReduce işine ihtiyacınız olmayacaktır. Unutmayın ki, etrafta dolaşmış haldeyken, bütün problemlerinizi Hadoop ile çözmeniz gerektiği anlamına gelmez. zor ama yukarıdakilerin ikisinin bir karışımı olan
Bir sigara bariz versiyonu ...
bir WordCount MapReduce işi yazın ama Reducer içinde TopN MapReduce işlerde böyle bir şey yapmak Ben Seni daha önce gösterdi. Daha sonra, her redüktör çıkışını sadece bu redüktörden gelen TopN sonuçları alın.
Yani, Top 10 yapıyorsanız, her redüktör 10 sonuç verecektir. Diyelim ki 30 redüktörünüz var, 300 sonuç elde edersiniz. Sonra
, bash ile opsiyon # 2 ile aynı şeyi yapmak:
hadoop fs -cat /output/of/wordcount/part* | sort -n -k2 -r | head -n10
yalnızca sonuçlar bir kısmını postprocess Bunun nedeni hızlı olması gerekir.
Bunu yapmayı düşünebilmemin en hızlı yolu budur, ancak muhtemelen çabaya değmez.
Merhaba Donald, Çözümünüz için çok teşekkürler. Lütfen bana bu yaklaşımın da yazdığımın doğru olduğunu söyleyin. ==> Hadoop'ta, redüktör çıkışları tuşların değerine göre sıralar. Bu yüzden çıktıyı yazarken, sadece anahtarı ve değeri değiştirirsek, i. e., değeri (bu sayım olacaktır), değer olarak anahtar ve anahtar olarak yazın, sonra değerler temelinde sıralanır. Sonra tek yapmamız gereken komutu çalıştırmak: hadoop fs -cat
Bu nedenle, bu görevi yerine getirmek için iki harita azaltma işini çalıştırmamız gerekiyor. Normal kelimeleri bulmak için ilk iş ve karşılık gelen sayımlar ve ikinci iş, her redüktörden en üstteki N'yi bulmaktır. koddaki ikinci iş. Nasıl çalışıyor ve nihayet tüm redüktörlerin çıkışındaki en üstteki n değerlerini nasıl alıyoruz? Her seferinde bir şeyin üst n'sini nasıl hesaplıyoruz ve nihayet tam olarak en iyi n değerlerini nasıl üretiyoruz? – user3078014
Lütfen "sort -n -k2 -r | kafa -n20 '.. n, k2 ve r komutunda olduğu gibi? – user3078014
MR yolunda sorunların nasıl çözüleceğine aşina olmak için MapReduce Design Patterns kitabını edinin. Here, TopN'yi almak için kitabın kodudur.Ayrıca, daha fazla algoritma için Data-Intensive Text Processing with MapReduce'u kontrol edin.
Bu topTendriver kodunu KULLANMAYIN. , TreeMap'i kullanır ve aynı int değer kayıtlarını geçersiz kılar ve doğru olarak sıralanacak şekilde toplam değeri hesaplamaz. – halil
@halil, belki daha iyi bir uygulama tavsiye edebilir misiniz? –
@halil bu fenomen için herhangi bir açıklama yararlı olacaktır –
- 1. En iyi derinlik harita oluşturma algoritması nedir?
- 2. Hive - bir grup içindeki en iyi n kayıtları
- 3. Çok çekirdekli makinelerde Hadoop ve harita küçültme
- 4. n düğümlerini tek bir düğüme bağlamanın en iyi yolu?
- 5. Hadoop
- 6. Hadoop
- 7. ASP.NET MVC4 n Katman Mimarisi: en iyi yaklaşım
- 8. Öğrenme için en iyi kaynak nedir (N) ASM?
- 9. SQL Group BY, her grup için en iyi N öğe
- 10. Grup tarafından ve bulmak üst n value_counts
- 11. Elastic Harita Azalt ve amazon s3: Erişim tuşları ile ilgili hata
- 12. dönüş n en küçük indeksleri
- 13. Kalıcı Disk Boyutunu Azalt
- 14. Pandalar veri çerçevesindeki tüm değerleri toplamlamanın en iyi yolu nedir?
- 15. en iyi (veya en azından iyi) kılavuz
- 16. En iyi web tasarımı kaynak kodu editörü nedir?
- 17. Raylar - sadece üretimde kodu görüntülemek için en iyi yol?
- 18. GMM fit en iyi model
- 19. n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n bana 1 * 1 olmalıdır. bunun yerine 2 * 2
- 20. Grup başına en üstteki n gibi karmaşık sorgular için hazırda bekletme yönteminin en iyi yolu
- 21. Harita listesinde 3 listelerin pirol değerleri
- 22. ctags en iyi uygulamalar
- 23. Hadoop
- 24. Regex en iyi uygulamaları
- 25. CouchDB Futon'daki Onay Kutusunu Azalt
- 26. R azalt satır ve sütun değerlerin toplamı
- 27. "Harita çıktısının akıtılması başlatılıyor" hadoop harita görevinde çok uzun zaman alıyor
- 28. Bitişik olmayan öğe tarafından bölünebilir n çözümlenmiyor
- 29. Hata: function() en az n argümanı alır (n)
- 30. MATLAB programlama en iyi uygulamaları
Ne demek "Bu basit görev için herhangi bir hadoop komutunu kullanmak istemiyorum"? –
Hadoop'ta redüktör, çıkışı tuşların değeri temelinde sıralar. Bu yüzden çıktıyı yazarken, sadece anahtarı ve değeri değiştirirsek, i. e., değeri (bu sayım olacaktır), değer olarak anahtar ve anahtar olarak yazın, sonra değerler temelinde sıralanır. Sonra tek yapmamız gereken şu komutu çalıştırmaktır: hadoop fs -cat | tail -n n, bilmek istediğiniz en üstteki n değerleri. Ama ben görevi tamamlamak için yukarıdaki komutu kullanmak istemiyorum. Sadece harita ile yapmak istiyorum sadece progamming azaltmak. –
user3078014
Yanlış. Redüktör çıkışı sıralamaz. Redüktör, girdiyi haritacılardan ayırır! Büyük fark! –