Программа Hadoop Java всегда работает в автономном режиме

Я написал программу на Java, которая использует Hadoop. Я запускаю свою программу из командной строки, используя «java -jar prog.jar», и вижу, что она работает в автономном режиме. Я могу это сказать, потому что демоны JobTracker и TaskTracker не обязательно должны быть запущены для успешного выполнения моей программы. Если я выполняю свою программу, используя «hadoop jar prog.jar» (с отключенными демонами map/reduce), естественно, она не работает.

Я хочу, чтобы моя java-программа выполнялась в псевдораспределенном режиме, но у меня такое ощущение, что она не может найти файлы конфигурации. Я попытался выполнить его как «java -cp /usr/hadoop-1.1.1/conf -jar prog.jar», чтобы указать, где находятся файлы конфигурации, но все еще без кубиков.

У меня такое чувство, что путь к классам неверен или что-то в этом роде. Я нуб, поэтому любая помощь приветствуется. Спасибо,

mj

Вот фрагмент моего кода запуска задания с объектом конфигурации.

    Configuration config = new Configuration();     
    Job job = new Job(config);
    job.setJobName("Test");
    job.setJarByClass(MyMapper.class);      

    job.setMapperClass(MyMapper.class);
    job.setReducerClass(MyReducer.class);

    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);

    job.setMapOutputKeyClass(LongWritable.class);
    job.setMapOutputValueClass(Text.class);

    job.setInputFormatClass(MyInputFormat.class);

    FileInputFormat.addInputPath(job, new Path("hdfs://hadoop0.hq.net:54310/" + saFileName));
    FileOutputFormat.setOutputPath(job, new Path("hdfs://hadoop0.hq.net:54310/" + saFileName + "-output"));

    job.waitForCompletion(true);

person mj_    schedule 15.02.2013    source источник


Ответы (1)


Я запускаю свою программу из командной строки, используя «java -jar prog.jar», и вижу, что она работает в автономном режиме.

Это неправда. Команда java -jar используется для запуска автономных приложений Java. Чтобы запустить задание Hadoop, вам нужно использовать команду hadoop jar, как вы упомянули.

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

bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'

Если приведенная выше команда выполняется успешно, вы можете попробовать свои собственные задачи.

Изменить: вы можете использовать Runtime.exec для вызова hadoop jar следующим образом:

Process p = Runtime.getRuntime().exec(cmd);
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = input.readLine();
while (line != null) {
  // process output of the task
  // ...
}
input.close();
// wait for the task complete
p.waitFor();
int ret = p.exitValue();
// process the task result
// ...
person ericson    schedule 15.02.2013
comment
Я обнаружил, что добавляю файлы конфигурации вручную, например config.addResource(new Path(core-site.xml)); тогда он работает нормально. - person mj_; 15.02.2013
comment
Сценарий bin/hadoop настроит для вас среду (путь к классам, путь к файлу конфигурации и т. д.). bin/hadoop jar вызывает core/org/apache/hadoop/util/RunJar.java, который вызывает ваш основной класс. Вам не нужно добавлять ресурс вручную, если вы используете команду bin/hadoop jar, и я думаю, что это будет предпочтительным подходом. - person ericson; 18.02.2013
comment
Я пытаюсь создать службу Java с веб-интерфейсом, через который можно запускать задания. Когда работа завершена, моя служба отправляет результаты обратно. bin/hadoop jar по какой-то причине не показался мне подходящим. - person mj_; 18.02.2013
comment
Я отредактировал свой ответ, включив в него оболочку для bin/hadoop jar, надеюсь, это поможет. - person ericson; 19.02.2013