2014-09-05 2 views
1

hadoop에서 mapreduce 단어 카운트 코드를 시도했지만 감속기 클래스가 호출되지 않으며 프로그램이 매퍼 클래스를 실행 한 후 종료됩니다.Hadoop : 재정의를 사용하여도 감속기 클래스가 호출되지 않음

import java.io.IOException; 
import java.util.*; 

import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.conf.*; 
import org.apache.hadoop.io.*; 
import org.apache.hadoop.mapreduce.*; 
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; 
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat; 
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; 

public class WordCount { 

public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> { 
    private final static IntWritable one = new IntWritable(1); 
    private Text word = new Text(); 
    @Override 
    public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { 
     String line = value.toString(); 
     StringTokenizer tokenizer = new StringTokenizer(line); 
     while (tokenizer.hasMoreTokens()) { 
      word.set(tokenizer.nextToken()); 
      context.write(word, one); 
     } 
    } 
} 

public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> { 


    @Override 
    public void reduce(Text key, Iterable<IntWritable> values, Context context) 
     throws IOException, InterruptedException { 
     int sum = 0; 
     for (IntWritable val : values) { 
      sum += val.get(); 
     } 
     context.write(key, new IntWritable(sum)); 
    } 
} 

public static void main(String[] args) throws Exception { 
    Configuration conf = new Configuration(); 

     Job job = new Job(conf, "wordcount"); 

    job.setOutputKeyClass(Text.class); 
    job.setOutputValueClass(IntWritable.class); 

    job.setMapperClass(Map.class); 
    job.setReducerClass(Reduce.class); 

    job.setInputFormatClass(TextInputFormat.class); 
    job.setOutputFormatClass(TextOutputFormat.class); 

    FileInputFormat.addInputPath(job, new Path(args[0])); 
    FileOutputFormat.setOutputPath(job, new Path(args[1])); 

    job.waitForCompletion(true); 
} 

} 

나는 필요에 따라 클래스를 오버라이드했습니다.

IDE : 이클립스 루나
하둡 : 버전 2.5

+1

성공적으로 종료합니까? 오류 메시지가 있습니까? 로그를 확인 했습니까? – vefthym

+0

0을 반환하면 성공적으로 종료됩니다. – ayush1794

+0

가장 이상한 부분은 이클립스에서만 실행되는 경우입니다. 하지만 hadoop cli를 사용하여 직접 실행할 때가 아닙니다. – ayush1794

답변

0

작업 개체는 작업의 사양을 형성하고 작업이 실행되는 방식을 제어 할 수 있습니다. Hadoop 클러스터에서이 작업을 실행하면 Hadoop이 클러스터에서 배포 할 JAR 파일에 코드를 패키징합니다.

JAR 파일의 이름을 명시 적으로 지정하는 대신 Job의 setJarByClass() 메소드에서 클래스를 전달할 수 있습니다.이 메소드는 Hadoop이이 클래스를 포함하는 JAR 파일을 찾아 관련 JAR 파일을 찾는 데 사용합니다.

main 메소드의 문이 표시되지 않습니다. 따라서 이것을 포함시킨 다음 코드를 컴파일하고 실행하십시오.

job.setJarByClass (WordCount.class);

관련 문제