2012-08-07 4 views
0

두 파일을 하나로 병합하고 싶습니다. 나는 두 명의 매퍼에게 읽어주고 하나의 감속기에 합류시켰다.hadoop에서 JobControl을 사용하는 방법

 JobConf classifiedConf = new JobConf(new Configuration()); 
      classifiedConf.setJarByClass(myjob.class); 
    classifiedConf.setJobName("classifiedjob"); 
    FileInputFormat.setInputPaths(classifiedConf,classifiedInputPath); 
    classifiedConf.setMapperClass(ClassifiedMapper.class); 
    classifiedConf.setMapOutputKeyClass(TextPair.class); 
    classifiedConf.setMapOutputValueClass(Text.class); 
    Job classifiedJob = new Job(classifiedConf); 
    //first mapper config 

    JobConf featureConf = new JobConf(new Configuration()); 
    featureConf.setJobName("featureJob"); 
      featureConf.setJarByClass(myjob.class); 
    FileInputFormat.setInputPaths(featureConf, featuresInputPath); 
    featureConf.setMapperClass(FeatureMapper.class); 
    featureConf.setMapOutputKeyClass(TextPair.class); 
    featureConf.setMapOutputValueClass(Text.class); 
    Job featureJob = new Job(featureConf); 
      //second mapper config 

    JobConf joinConf = new JobConf(new Configuration()); 
    joinConf.setJobName("joinJob"); 
      joinConf.setJarByClass(myjob.class); 
    joinConf.setReducerClass(JoinReducer.class); 
    joinConf.setOutputKeyClass(Text.class); 
    joinConf.setOutputValueClass(Text.class); 
    Job joinJob = new Job(joinConf); 
      //reducer config 
      //JobControl config 
      joinJob.addDependingJob(featureJob); 
    joinJob.addDependingJob(classifiedJob); 
    secondJob.addDependingJob(joinJob); 
    JobControl jobControl = new JobControl("jobControl"); 
    jobControl.addJob(classifiedJob); 
    jobControl.addJob(featureJob); 
    jobControl.addJob(secondJob); 

    Thread thread = new Thread(jobControl); 
    thread.start(); 
    while(jobControl.allFinished()){ 
     jobControl.stop(); 
    } 

는하지만,이 메시지가 :

Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same. 
WARN mapred.JobClient: No job jar file set. User classes may not be found. See JobConf(Class) or JobConf#setJar(String). 

사람이 ..................

도와 줘요 : 가 mapred.JobClient WARN

답변

0

어떤 버전의 Hadoop을 사용하고 있습니까?

경고 메시지가 나타나면 프로그램을 중지 하시겠습니까?

setJarByClass()를 사용할 필요가 없습니다. 내 스 니펫을 볼 수 있습니다. setJarByClass() 메서드를 사용하지 않고 실행할 수 있습니다.

public class MyApp extends Configured implements Tool { 

    public int run(String[] args) throws Exception { 
     // Configuration processed by ToolRunner 
     Configuration conf = getConf(); 

     // Create a JobConf using the processed conf 
     JobConf job = new JobConf(conf, MyApp.class); 

     // Process custom command-line options 
     Path in = new Path(args[1]); 
     Path out = new Path(args[2]); 

     // Specify various job-specific parameters  
     job.setJobName("my-app"); 
     job.setInputPath(in); 
     job.setOutputPath(out); 
     job.setMapperClass(MyMapper.class); 
     job.setReducerClass(MyReducer.class); 

     // Submit the job, then poll for progress until the job is complete 
     JobClient.runJob(job); 
     return 0; 
    } 

    public static void main(String[] args) throws Exception { 
     // Let ToolRunner handle generic command-line options 
     int res = ToolRunner.run(new Configuration(), new MyApp(), args); 

     System.exit(res); 
    } 
} 

이 바로 하둡의 문서 here 나오는 :

0

당신은 당신의 작업이 방법을 구현해야합니다.

기본적으로 귀하의 직업은 Configured에서 상속 받고 Tool을 구현해야합니다. 이렇게하면 run()을 구현해야합니다. 그런 다음 Toolrunner.run(<your job>, <args>)을 사용하여 주 수업을 시작하면 경고가 사라집니다.

0

드라이버에이 코드가 필요합니다. job.setJarByClass(MapperClassName.class);

관련 문제