복붙노트

[HADOOP] MRUnit 예제를 실행하려고 충돌하는 API

HADOOP

MRUnit 예제를 실행하려고 충돌하는 API

나는 MRUnit 놀아 봤는데 단어 수 및 단위 테스트를위한 튜토리얼 다음의 단어 수 예를 하둡을 위해 그것을 실행 시도

팬이 있지만, 나는 코드를 실행하기 위해 Eclipse를 사용하고 난 setMapper 기능에 대한 오류가 계속

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;


import org.apache.hadoop.mrunit.mapreduce.MapDriver;
import org.apache.hadoop.mrunit.mapreduce.MapReduceDriver;
import org.apache.hadoop.mrunit.mapreduce.ReduceDriver;

import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;

import org.junit.Before;
import org.junit.Test;

public class TestWordCount {
  MapReduceDriver<LongWritable, Text, Text, IntWritable, Text, IntWritable> mapReduceDriver;
  MapDriver<LongWritable, Text, Text, IntWritable> mapDriver;
  ReduceDriver<Text, IntWritable, Text, IntWritable> reduceDriver;

  @Before
  public void setUp() throws IOException
  {
      WordCountMapper mapper = new WordCountMapper();
      mapDriver = new MapDriver<LongWritable, Text, Text, IntWritable>();
      mapDriver.setMapper(mapper);  //<--Issue here

      WordCountReducer reducer = new WordCountReducer();
      reduceDriver = new ReduceDriver<Text, IntWritable, Text, IntWritable>();
      reduceDriver.setReducer(reducer);

      mapReduceDriver = new MapReduceDriver<LongWritable, Text, Text, IntWritable,     Text, IntWritable>();
      mapReduceDriver.setMapper(mapper); //<--Issue here
      mapReduceDriver.setReducer(reducer);
  }

에러 메시지:

java.lang.Error: Unresolved compilation problems: 
    The method setMapper(Mapper<LongWritable,Text,Text,IntWritable>) in the type MapDriver<LongWritable,Text,Text,IntWritable> is not applicable for the arguments (WordCountMapper)
    The method setMapper(Mapper<LongWritable,Text,Text,IntWritable>) in the type MapReduceDriver<LongWritable,Text,Text,IntWritable,Text,IntWritable> is not applicable for the arguments (WordCountMapper)

이 문제를 찾고, 나는 그것이 API 충돌 할 수 있다고 생각하지만 난 그것을 찾아 어디서 모르겠어요. 다른 사람 전에이 문제가?

편집 나는 hadoop2 항아리와 최신 Junit와 거기에 (4.10) 항아리와 사용자 정의 라이브러리를 사용하고 있습니다.

편집 여기에 2 WordCountMapper 코드입니다

import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class WordCountMapper extends Mapper<Object, Text, Text, IntWritable> 
{

    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();


    public void map(Object key, Text value, Context context)throws IOException, InterruptedException 
    {
        StringTokenizer itr = new StringTokenizer(value.toString());
        while (itr.hasMoreTokens()) 
        {
            word.set(itr.nextToken());
            context.write(word, one);
        }
    }
}

최종 편집 / IT 작동

내가 설정하는 데 필요한 밝혀

WordCountMapper mapper = new WordCountMapper();

Mapper mapper = new WordCountMapper();

이후 제네릭에 문제가 있었다. 또한 내 사용자 정의 라이브러리에 mockito 라이브러리를 가져올 필요가 있었다.

해결법

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

    1.여기에 귀하의 문제입니다

    여기에 귀하의 문제입니다

    public class WordCountMapper extends Mapper<Object, Text, Text, IntWritable>
    ....
    MapDriver<LongWritable, Text, Text, IntWritable> mapDriver;
    

    (Object)를 귀하의 WordCountMapper 입력 유형은 MapDriver 입력 유형 (LongWritable)와 호환되지 않습니다. 당신의 매퍼 정의를 변경

    class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>
    

    당신은 아마 또한 LongWritable 키 객체 키에서지도 방법 인수를 변경하고 싶습니다.

  2. ==============================

    2.당신이 가져온 정확한 클래스를 확인, 나는 위의보고 같은 오류 메시지가 직면 잘못된 클래스를 가져오고 reduce_test하지만 인해 두 클래스 감속기의 올바른 매개 변수를 가진 내 위의 프로그램과는 달리 같은 오류가 발생했다 직면

    당신이 가져온 정확한 클래스를 확인, 나는 위의보고 같은 오류 메시지가 직면 잘못된 클래스를 가져오고 reduce_test하지만 인해 두 클래스 감속기의 올바른 매개 변수를 가진 내 위의 프로그램과는 달리 같은 오류가 발생했다 직면

    잘못 가져 그 수업

    수입 org.apache.hadoop.mrunit.ReduceDriver;

    올바른 클래스 ---

    수입 org.apache.hadoop.mrunit.mapreduce.ReduceDriver;

    당신이 확신하는 경우 mapper_test의 경우 동일한 솔루션, 당신의 매개 변수 Mapper__class 및 Mapper_test에서 동일한 지

  3. from https://stackoverflow.com/questions/24084265/conflicting-api-when-trying-to-run-mrunit-example by cc-by-sa and MIT license