Bu temel bir soru olabilir, ancak Google’da bunun için bir yanıt bulamadım.
Çıkış dizininde birden çok çıktı dosyası oluşturan bir harita küçültme işim var. Java uygulamam bu işi uzak bir çalışan dizininde yürütür ve iş bittikten sonra çıktıyı org.apache.hadoop.fs.FileSystem
API kullanarak programatik olarak okuması gerekir. Mümkün mü?
Uygulama, çıkış dizinini bilir, ancak harita azaltma işi tarafından oluşturulan çıktı dosyalarının adlarını bilmez. Bir dosya içeriklerini programlı olarak hadoop dosya sistemi API'sinde programlamanın bir yolu yok gibi görünüyor. Çıkış dosyaları nasıl okunacak?
Böyle bir durum senaryosu gibi görünüyor, bunun bir çözümü olduğuna eminim. Ama çok açık bir şey eksik.Hadoop Mapreduce Programının çıktısını program aracılığıyla okumak
cevap
Aradığınız yöntem, listStatus (Yol) olarak adlandırılır. Sadece bir Dosyanın içindeki tüm dosyaları FileStatus dizisi olarak döndürür. Daha sonra basitçe bir döngü nesnesi oluşturabilir ve okuyabilirsiniz. Eğer okuyucu böyle kurulum yapabilirsiniz Hadoop 2.x için
FileStatus[] fss = fs.listStatus(new Path("/"));
for (FileStatus status : fss) {
Path path = status.getPath();
SequenceFile.Reader reader = new SequenceFile.Reader(fs, path, conf);
IntWritable key = new IntWritable();
IntWritable value = new IntWritable();
while (reader.next(key, value)) {
System.out.println(key.get() + " | " + value.get());
}
reader.close();
}
:
SequenceFile.Reader reader =
new SequenceFile.Reader(conf, SequenceFile.Reader.file(path))
Birkaç seçenek vardır: Burada bazen kullanmak iki.
Yöntem 1.
: Veri büyüklüğüne bağlı olarak (Madde 6 here bulundu)hadoop fs -getmerge hdfs-output-dir local-file
// example
hadoop fs -getmerge /user/kenny/mrjob/ /tmp/mrjob_output
// another way
hadoop fs -cat /user/kenny/mrjob/part-r-* > /tmp/mrjob_output
"Bu HDF'ler dosyaları HDF'ler-çıkışı-birleştirir aşağıdaki HDF'ler faydalanmak için komutları dir/part- * tek bir yerel dosyaya. "
Sonra tek bir dosyada okuyabilirsiniz. (Bu HDF'ler yerel deposunda olup unutmayın)
Yöntem 2.: (Bir Yapılandırma, FileSystem örneklerini içeren HDF'ler denilen sınıf hem de diğer yardımcı yöntemler var)
: Bir yardımcı yöntemini oluşturpublic List<Path> matchFiles(String path, final String filter) {
List<Path> matches = new LinkedList<Path>();
try {
FileStatus[] statuses = fileSystem.listStatus(new Path(path), new PathFilter() {
public boolean accept(Path path) {
return path.toString().contains(filter);
}
});
for(FileStatus status : statuses) {
matches.add(status.getPath());
}
} catch(IOException e) {
LOGGER.error(e.getMessage(), e);
}
return matches;
}
Daha sonra böyle bir komut aracılığıyla çağırabilirsiniz: hdfs.matchFiles("/user/kenny/mrjob/", "part-")
FSDataInputStream inputStream = fs.open(path);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String record;
while((record = reader.readLine()) != null) {
int blankPos = record.indexOf(" ");
System.out.println(record+"blankPos"+blankPos);
String keyString = record.substring(0, blankPos);
String valueString = record.substring(blankPos + 1);
System.out.println(keyString + " | " + valueString);
}
- 1. Hadoop MapReduce ara çıkışı
- 2. Hadoop MapReduce
- 3. Zincirleme ile Hadoop MapReduce (C++)
- 4. Hadoop MapReduce ile Proje Fikri
- 5. Bir UIImageView programının koordinatlarını program aracılığıyla nasıl edinebiliriz?
- 6. Mapreduce çalıştığında uygulamalar UU'da gösterilmiyor hadoop işi?
- 7. Mapreduce
- 8. Program işlevine program aracılığıyla erişme
- 9. MapReduce alternatifleri
- 10. Hadoop: ORC dosyalarını okumak ve RDBMS'ye eklemek?
- 11. Hadoop
- 12. Golang montaj çıktısını okumak kolay mı?
- 13. MapReduce iş yürütme sırasında konsolda nasıl yazdırılır hadoop
- 14. NUnit program aracılığıyla çalıştırılıyor
- 15. Program aracılığıyla bir UIView
- 16. Program aracılığıyla Xcode
- 17. Program aracılığıyla RadioButtons oluşturma
- 18. Print FixedDocument program aracılığıyla
- 19. Program aracılığıyla Özelleştirme UITableViewCell
- 20. Program aracılığıyla UITableViewCell tokatlamak?
- 21. Program aracılığıyla oluşturulmuş UIPopoverPresentationController
- 22. Program aracılığıyla bir program oluşturucu oluşturun.
- 23. Java programının adını alın
- 24. UILongPressGesture'u program aracılığıyla nasıl gönderebilirim?
- 25. Program aracılığıyla WCF istemcisi oluşturun
- 26. program aracılığıyla oluşturmaya çalışıyor rightBarButtonItem
- 27. Metin Alanları Oluşturma program aracılığıyla
- 28. Program aracılığıyla Fling ListView Android
- 29. Android profillerini program aracılığıyla değiştir
- 30. WCF IncludeExceptionDetailInFaults program aracılığıyla mı?
sayesinde Yardımlarınız için çok. – nabeelmukhtar
@Thomas, listStatus ayrıca başka dosyaları döndürmek gibi görünüyor, örn. _SUCCESS –
Evet, ama bu benim sorunum değil;) Kendiniz için filtre etmeniz gerekiyor –