2014-01-10 2 views
0

코드 실행 중에 내 map() 함수가 전혀 호출되지 않은 것 같아서 그 이유를 이해할 수 없습니다. 다음은 내 작업의 클래스 ...Hadoop map() 함수가 호출되지 않습니다.

public class MyHadoopJob extends Configured implements Tool{ 

static class MyMapper extends Mapper<LongWritable, Text, LongWritable, Text>{ 

    public MyMapper(){ 
     System.out.println("Mapper init!"); 
    } 

    @Override 
    protected void map(LongWritable key, Text value, 
         org.apache.hadoop.mapreduce.Mapper<LongWritable, Text, LongWritable, Text>.Context context) 
      throws java.io.IOException, InterruptedException { 
     System.out.println("MAP!"); 
     context.getCounter("mygroup", "jeff").increment(1); 
     context.write(key, value); 
    }; 
} 

@Override 
public int run(String[] strings) throws Exception { 

    Configuration conf = MYOBJ.getHadoopConf(); 
    this.setConf(conf); 

    Job job = new Job(conf, "MyJob"); 
    job.setJarByClass(MyHadoopJob.class); 
    job.setMapperClass(MyMapper.class); 
    job.setOutputKeyClass(Text.class); 
    job.setOutputValueClass(Text.class); 
    job.setMapOutputKeyClass(LongWritable.class); 
    job.setMapOutputValueClass(Text.class); 

    FileInputFormat.setInputPaths(job, new Path(strings[0])); 
    FileOutputFormat.setOutputPath(job, new Path(strings[1])); 

    job.waitForCompletion(true); 

    for(int i = 0; i < 10; i++){ 
     log.info("Progress -> " + job.mapProgress()); 
     Thread.sleep(15000); 
    } 

    return 0; 
    } 

} 

정말 왜지도() 클래스 또는이 실제로 클래스의 초기화가 절대 호출되지됩니까 알아내는 어떤 도움을 주셔서 감사합니다 것입니까?

+0

작업을 실행할 때 무엇이 ​​표시됩니까? –

답변

0

System.out.println 문을 사용하여 Hadoop 작업을 디버그 한 것으로 보입니다.

이 접근법의 문제점은 println 문이 콘솔에 전달되지 않는다는 것입니다. 그들은 일자리 기록부에 간다. 그래서 "매퍼 초기화"가 표시되지 않습니다. 당신의 콘솔에.

작업 로그를 확인해야합니다. http://example.com:50030/jobtracker.jsp-> 완성 된 으로 일자리를 클릭>지도를 클릭거나 작업> tasknumber 클릭 줄일 로그에 액세스 할 수

쉬운 방법입니다 :

은 위대한 사람 (이 answer)를 인용 -> 작업 로그 -> 표준 로그.

관련 문제