2013-06-25 3 views
2

에서 감속기의 수는, 나는 Partitionner 사용할 수 있습니다하둡 내 맵리 듀스 프로그램에서 이클립스

public class TweetPartitionner extends HashPartitioner<Text, IntWritable>{ 

    public int getPartition(Text a_key, IntWritable a_value, int a_nbPartitions) { 
     if(a_key.toString().startsWith("#")) 
      return 0; 
     else 
      return 1; 
    } 

} 

을 그리고 감소 작업의 수를 설정 : job.setNumReduceTasks(2);

을하지만, 나는 다음과 같은 오류가 발생합니다 : java.io.IOException: Illegal partition for #rescinfo (1)

매개 변수 a_nbPartitions1을 반환합니다.

나는 다른 게시물에 읽은 : 이클립스를 실행 Hadoop: Number of reducer is not equal to what I have set in program

한다는 것은 로컬 작업 러너를 사용하는 것 같다. 만 0 또는 1 감속기를 지원합니다. 둘 이상의 감속기를 사용하도록 설정하려고하면 무시하고 무시합니다.

Cygwin에 설치된 Hadoop 0.20.2에 제가 개발했고 물론 이클립스를 사용합니다. 어떻게해야합니까?

답변

4

실제로는 전용 Hadoop 클러스터가 필요하지 않습니다. Eclipse에 pseudo-distributed 클러스터에서이 작업을 실행하고 자체에서 로컬로 실행하지 않을 것을 지정해야한다는 것입니다.

Configuration conf = new Configuration(); 
conf.set("fs.default.name", "hdfs://localhost:9000"); 
conf.set("mapred.job.tracker", "localhost:9001"); 

그리고 그 이후로 2 감속기의 수를 설정 : 당신은 당신의 코드에서 다음 줄을 추가 할 필요가 수행

job.setNumReduceTasks(2); 

그리고 그래, 당신은 매우 확실해야 당신의 파티셔 논리. 맞춤 파티션을 작성하는 방법을 보여주는 page을 방문하십시오.

+0

완벽한 주셔서 감사합니다, 그것은 매우 잘 작동합니다! 당신의 연결 느릅 나무 주셔서 감사합니다 매우 정확하고 helpfull입니다! – Apaachee

1

작업을 실행하기위한 전용 빈 클러스터가 생길 때까지 로컬 모드에서 둘 이상의 감속기를 사용할 수 없습니다. Eclipse가 hadoop 클러스터에 작업을 제출하도록 구성 할 수 있습니다. 그러면 구성이 고려됩니다.

언제나 자신의 파티셔를 작성할 때 항상 Math.min(i, a_nbPartitions-1)을 사용해야합니다.

+0

확인

HTH,이 대답 :( – Apaachee

관련 문제