2011-09-18 10 views
5

"Hadoop: Kesin Kılavuz" kitabında, aşağıdaki kodla birlikte bir örnek program vardır.Neden çıktı anahtarı/değer sınıfını Hadoop programında açık olarak ayarlamamız gerekiyor?

JobConf conf = new JobConf(MaxTemperature.class); 
conf.setJobName("Max temperature"); 
FileInputFormat.addInputPath(conf, new Path(args[0])); 
FileOutputFormat.setOutputPath(conf, new Path(args[1])); 
conf.setMapperClass(MaxTemperatureMapper.class); 
conf.setReducerClass(MaxTemperatureReducer.class); 
conf.setOutputKeyClass(Text.class); 
conf.setOutputValueClass(IntWritable.class); 

MR çerçeve Mapper çıkış anahtarı ve değer sınıfının anlamaya gerekir ve JobConf sınıfı üzerine tespit edilmiştir işlevleri azaltın. Neden çıktı anahtarı ve değer sınıfını JobConf sınıfında açık bir şekilde ayarlamamız gerekiyor? Ayrıca, giriş anahtarı/değer çifti için benzer bir API yoktur.

cevap

7

nedeni türü silme [1] '. Çıktı K/V sınıflarını jenerik olarak ayarlarsınız. İş kurulumu sırasında (çalışma zamanı, derleme zamanı değil), bu jenerikler silinir.

giriş k/h sınıfları

düzenleyici bir sekans dosyası açarken bunları okuyabilir sınıfları Üstbilgi olan SequenceFiles durumunda, giriş dosyası okunabilir. Bu başlık her harita çıktısı SequenceFile olduğundan, yazılı, böylece sınıflar sağlamanız gerekir edilmelidir.

[1] http://download.oracle.com/javase/tutorial/java/generics/erasure.html