2011-09-18 5 views
5

"Hadoop : The Definitive Guide"책에는 아래 코드가있는 샘플 프로그램이 있습니다.Hadoop 프로그램에서 출력 키/값 클래스를 명시 적으로 설정해야하는 이유는 무엇입니까?

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); 

공명 틀은 매퍼로부터의 출력 및 키 값 클래스를 알아낼 수 있어야하고이 JobConf 클래스에 설정되고있는 기능을 줄인다. 왜 JobConf 클래스에서 출력 키와 값 클래스를 명시 적으로 설정해야합니까? 또한 입력 키/값 쌍에 대한 유사한 API가 없습니다.

답변

7

이유는 erasure [1]입니다. generics로 출력 K/V 클래스를 설정합니다. 작업 설정 (컴파일 타임이 아닌 런타임)에서는 이러한 제네릭이 지워집니다.

입력 k/v 클래스는 입력 파일에서 읽을 수 있습니다. SequenceFile의 경우 클래스가 헤더에 있습니다. 편집기에서 시퀀스 파일을 열 때 읽을 수 있습니다. 모든 헤더 출력은 SequenceFile이므로이 헤더를 작성해야하므로 클래스를 제공해야합니다.

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

관련 문제