2012-08-07 6 views
0

Je souhaite fusionner deux fichiers en un seul. J'ai fait deux mappeurs à lire et un réducteur à joindre.Comment utiliser JobControl dans hadoop

 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(); 
    } 

Mais, je reçois ce message: WARN mapred.JobClient:

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). 

anyone help s'il vous plaît ..................

Répondre

0

Quelle version de Hadoop utilisez-vous?

L'avertissement que vous obtenez va arrêter le programme?

Vous n'avez pas besoin d'utiliser setJarByClass(). Vous pouvez voir mon extrait, je peux l'exécuter sans utiliser la méthode setJarByClass().

0

Vous devez implémenter votre emploi de cette façon:

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); 
    } 
} 

Cela vient tout droit sorti de la documentation Hadoop here.

Donc, fondamentalement, votre travail doit hériter de Configured et implémenter Tool. Cela vous forcera à implémenter run(). Puis commencez votre travail à partir de votre classe principale en utilisant Toolrunner.run(<your job>, <args>) et l'avertissement disparaîtra.

0

Vous devez avoir ce code dans le driver job.setJarByClass(MapperClassName.class);

Questions connexes