복붙노트

[HADOOP] Hadoop 프로그램에서 출력 키 / 값 클래스를 명시 적으로 설정해야하는 이유는 무엇입니까?

HADOOP

Hadoop 프로그램에서 출력 키 / 값 클래스를 명시 적으로 설정해야하는 이유는 무엇입니까?

"Hadoop : The Definitive Guide"책에는 아래 코드가있는 샘플 프로그램이 있습니다.

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 프레임 워크는 JobConf 클래스에서 설정되는 Mapper 및 Reduce 함수의 출력 키 및 값 클래스를 알아낼 수 있어야합니다. 왜 JobConf 클래스에서 출력 키와 값 클래스를 명시 적으로 설정해야합니까? 또한 입력 키 / 값 쌍에 대한 유사한 API가 없습니다.

해결법

  1. ==============================

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

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

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

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

  2. from https://stackoverflow.com/questions/7461249/why-do-we-need-to-set-the-output-key-value-class-explicitly-in-the-hadoop-progra by cc-by-sa and MIT license