복붙노트

[HADOOP] job.setOutputKeyClass 및 job.setOutputReduceClass는 어디에 사용됩니까?

HADOOP

job.setOutputKeyClass 및 job.setOutputReduceClass는 어디에 사용됩니까?

나는 그들이 감속기를 언급한다고 생각했지만 내 프로그램에서

공용 정적 클래스 MyMapper 확장             매퍼

공용 static 클래스 MyReducer extends             감속기 <텍스트, 텍스트, NullWritable, 텍스트>

그래서 내가 가진다면

job.setOutputKeyClass (NullWritable.class);

job.setOutputValueClass (Text.class);

나는 다음 예외를 얻는다.

지도에서 키에 유형이 일치하지 않습니다 : 예상 org.apache.hadoop.io.NullWritable, 수신 된 org.apache.hadoop.io.Text

하지만 내가 가진다면

job.setOutputKeyClass (Text.class);

문제 없습니다.

sth 내 코드가 잘못 되었나요? 아니면 NullWritable 또는 sth 때문에 발생합니까?

또한 job.setInputFormatClass와 job.setOutputFormatClass를 사용해야합니까? 내 프로그램이 제대로 실행되지 않기 때문에.

해결법

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

    1.호출 job.setOutputKeyClass (NullWritable.class); 지도 및 감축 단계에서 출력으로 예상되는 유형을 설정합니다.

    호출 job.setOutputKeyClass (NullWritable.class); 지도 및 감축 단계에서 출력으로 예상되는 유형을 설정합니다.

    Mapper가 Reducer와 다른 유형을 방출하는 경우 JobConf의 setMapOutputKeyClass () 및 setMapOutputValueClass () 메소드를 사용하여 맵퍼가 생성하는 유형을 설정할 수 있습니다. 이들은 암묵적으로 감속기가 예상하는 입력 유형을 설정합니다.

    (출처 : Yahoo Developer Tutorial)

    두 번째 질문에 대해서는 기본 InputFormat이 TextInputFormat입니다. 이것은 각 입력 파일의 각 행을 별도의 레코드로 취급하고 구문 분석을 수행하지 않습니다. 입력을 다른 형식으로 처리해야하는 경우 이러한 메소드를 호출 할 수 있습니다. 다음은 몇 가지 예입니다.

    InputFormat             | Description                                      | Key                                      | Value
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    TextInputFormat         | Default format; reads lines of text files        | The byte offset of the line              | The line contents
    KeyValueInputFormat     | Parses lines into key, val pairs                 | Everything up to the first tab character | The remainder of the line
    SequenceFileInputFormat | A Hadoop-specific high-performance binary format | user-defined                             | user-defined
    

    OutputFormat의 기본 인스턴스는 텍스트 파일의 개별 행에 (키, 값) 쌍을 기록하는 TextOutputFormat입니다. 아래의 몇 가지 예 :

    OutputFormat             | Description
    ---------------------------------------------------------------------------------------------------------
    TextOutputFormat         | Default; writes lines in "key \t value" form
    SequenceFileOutputFormat | Writes binary files suitable for reading into subsequent MapReduce jobs
    NullOutputFormat         | Disregards its inputs
    

    (출처 : 기타 야후 개발자 자습서)

  2. from https://stackoverflow.com/questions/14225205/where-does-job-setoutputkeyclass-and-job-setoutputreduceclass-refers-to by cc-by-sa and MIT license