2015-04-13 2 views
1

Я новый два linux, и для моего проекта мы используем hasoop.Now мы написали 3 программы mapreduce таким образом, что выход 1-й программы вводится во вторую программу и вывод 2-й программы вводится в третью. Но мы запускаем 3 разных метода conf, сначала мы запускаем конфигурацию 1-й программы, а затем 2-го и после этого третьего. Теперь мы хотим, чтобы два запускали все три программы один за другим, это возможно используя задание cron в linux, если да, пожалуйста, укажите шаги. Мы хотим использовать два cron-задания, потому что нам нужно два запускать 3-программы в течение нескольких часовИспользование задания Cron для запуска программы hadoop в linux

ответ

0

лучший способ справиться с этим случаем - это подход с привязкой к цепочке.

http://gandhigeet.blogspot.in/2012/12/as-discussed-in-previous-post-hadoop.html

я отправляю код драйвера для вызова три задания MapReduce ..

public class ExerciseDriver { 


static Configuration conf; 

public static void main(String[] args) throws Exception { 

    ExerciseDriver ED = new ExerciseDriver(); 
    conf = new Configuration(); 
    FileSystem fs = FileSystem.get(conf); 

    if(args.length < 2) { 
     System.out.println("Too few arguments. Arguments should be: <hdfs input folder> <hdfs output folder> "); 
     System.exit(0); 
    } 

    String pathin1 = args[0]; 
    String pathout1 = args[1]; 


    //Run first Map reduce job 
    fs.delete(new Path(pathout1+"_1"), true); 

    ED.runFirstJob(pathin1, pathout1+"_1"); 

    ED.runSecondJob(pathout1+"_1", pathout1+"_2"); 

    ED.runThirdJob(pathout1+"_2", pathout1+"3"); 


} 

    public int runFirstJob(String pathin, String pathout) throws Exception { 

    Job job = new Job(conf); 
    job.setJarByClass(ExerciseDriver.class); 
    job.setMapperClass(ExerciseMapper1.class); 
    job.setCombinerClass(ExerciseCombiner.class); 
    job.setReducerClass(ExerciseReducer1.class); 
    job.setInputFormatClass(ParagrapghInputFormat.class); 
    job.setOutputFormatClass(TextOutputFormat.class); 
    job.setOutputKeyClass(Text.class); 
    job.setOutputValueClass(IntWritable.class); 
    FileInputFormat.addInputPath(job, new Path(pathin)); 
    FileOutputFormat.setOutputPath(job, new Path(pathout)); 

    job.submit(); 

    job.getMaxMapAttempts(); 


    boolean success = job.waitForCompletion(true); 
    return success ? 0 : -1; 

} 

    public int runSecondJob(String pathin, String pathout) throws Exception { 
    Job job = new Job(conf); 
    job.setJarByClass(ExerciseDriver.class); 
    job.setMapperClass(ExerciseMapper2.class); 
    job.setReducerClass(ExerciseReducer2.class); 
    job.setInputFormatClass(KeyValueTextInputFormat.class); 
    job.setOutputFormatClass(TextOutputFormat.class); 
    job.setOutputKeyClass(Text.class); 
    job.setOutputValueClass(Text.class);  
    FileInputFormat.addInputPath(job,new Path(pathin)); 
    FileOutputFormat.setOutputPath(job, new Path(pathout)); 
    boolean success = job.waitForCompletion(true); 
    return success ? 0 : -1; 
} 

    public int runThirdJob(String pathin, String pathout) throws Exception { 
    Job job = new Job(conf); 
    job.setJarByClass(ExerciseDriver.class); 
    job.setMapperClass(ExerciseMapper3.class); 
    job.setReducerClass(ExerciseReducer3.class); 
    job.setInputFormatClass(KeyValueTextInputFormat.class); 
    job.setOutputFormatClass(TextOutputFormat.class); 
    job.setOutputKeyClass(Text.class); 
    job.setOutputValueClass(Text.class);  
    FileInputFormat.addInputPath(job,new Path(pathin)); 
    FileOutputFormat.setOutputPath(job, new Path(pathout)); 
    boolean success = job.waitForCompletion(true); 
    return success ? 0 : -1; 
} 

    } 

после того, как только запланировать .jar файл в кронтаб. или же вы можете также пойти с oozie.as мы упоминали в классе драйвера 3 MapReduce выполняется один за other.first выхода для второго один входа

+0

Благодарим вас за ответ –

1

1. Создайте скрипт с помощью & & в последовательно выполняйте свои программы. Выполните свою первую команду, а затем используйте &&, затем вторую команду и так далее.

Ex: first command && second command && third command

2. Тип этого в терминале:

crontab -e 

Это откроет cronjob редактор терминала.

Добавьте эту строку, чтобы запустить свой сценарий оболочки каждые 15 минут,

*/15 * * * * /path/to/your/shell/script 

Для получения дополнительной справки о кронтабе см https://help.ubuntu.com/community/CronHowto

DELETE/КОПИЯ ВЫВОД КАТАЛОГ:

Если вы хотите во избежание использования каталога уже существует ошибка, удалите или скопируйте выходной каталог перед выполнением последовательных заданий хауопа. Добавьте это в сценарий оболочки, прежде чем команды Hadoop работы:

# Delete the output directory in HDFS 
hadoop fs -rmr /your/hdfs/output/directory/to/be/deleted 
# Copy the output directory from HDFS to HDFS 
hadoop fs -mkdir /new/hdfs/location 
hadoop fs -cp /your/hdfs/output/directory/to/be/copied/*.* /new/hdfs/location 
# Copy from HDFS to local filesystem 
sudo mkdir /path/to/local/filesystem 
hadoop fs -copyToLocal /your/hdfs/output/directory/to/be/copied/*.* /path/to/local/filesystem 

ПРИМЕЧАНИЕ: Если вы используете последнюю версию Hadoop, замените Hadoop фс с HDFS Dfs и -rmr с - rm -r. Не забудьте добавить "*. *" при копировании каталога, так как это скопирует все содержимое этой директории. Измените пути файла HDFS в соответствии с вашей конфигурацией.

+0

Благодарим вас за ответ –

+0

Выполнены ли шаги? –

+0

i m сталкивается с проблемой с выполнением программы hadoop последовательно вопрос после исключения полного скрипта i hv two также записывает скрипт для удаления вывода? –

Смежные вопросы