В настоящее время у меня есть два задания hadoop, где второе задание требует вывода первого для добавления в распределенный кеш. в настоящее время я запускаю их вручную, поэтому после завершения первого задания я передаю выходной файл в качестве аргумента во второе задание, а его драйвер добавляет его в кеш.Запуск зависимых заданий hadoop в одном драйвере
Первое задание - это просто простая работа с картой, и я надеялся, что смогу запустить одну команду при выполнении обоих заданий в последовательности.
Может ли кто-нибудь помочь мне с кодом, чтобы получить результат первого задания, помещенного в распределенный кеш, чтобы он мог быть передан во второе задание?
Благодаря
Edit: Это текущий драйвер для работы 1:
public class PlaceDriver {
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Usage: PlaceMapper <in> <out>");
System.exit(2);
}
Job job = new Job(conf, "Place Mapper");
job.setJarByClass(PlaceDriver.class);
job.setMapperClass(PlaceMapper.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
TextInputFormat.addInputPath(job, new Path(otherArgs[0]));
TextOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
Это драйвер для job2. Выход задания 1, передаваемый на работу 2 в качестве первого аргумента и загружается в кэш
public class LocalityDriver {
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 3) {
System.err.println("Usage: LocalityDriver <cache> <in> <out>");
System.exit(2);
}
Job job = new Job(conf, "Job Name Here");
DistributedCache.addCacheFile(new Path(otherArgs[0]).toUri(),job.getConfiguration());
job.setNumReduceTasks(1); //TODO: Will change
job.setJarByClass(LocalityDriver.class);
job.setMapperClass(LocalityMapper.class);
job.setCombinerClass(TopReducer.class);
job.setReducerClass(TopReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
TextInputFormat.addInputPath(job, new Path(otherArgs[1]));
TextOutputFormat.setOutputPath(job, new Path(otherArgs[2]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
Вы можете начать писать здесь свой код, который вызывает два рабочих места, и тогда люди могут помочь вам изменить его. – adranale
Хорошо, я добавил его –