Как отлаживать задания Hadoop mapreduce из eclipse?

Я запускаю hadoop на одной-машине, локальная-только установка, и я ищу хороший, безболезненный способ отладки картографов и редукторов в eclipse. В Eclipse нет проблем с выполнением задач mapreduce. Однако, когда я перехожу к отладке, это дает мне эту ошибку:

03/12/28 14 :03 :23 WARN mapred.JobClient :Не задан файл jar задания. Пользовательские классы могут быть не найдены. См. JobConf(Class)или JobConf#setJar(String).

Итак, я провожу небольшое исследование. По-видимому, я должен использовать средство удаленной отладки eclipse и добавить это к моему hadoop-env.sh:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5000

. Я делаю это, и я могу выполнить свой код в eclipse. Единственная проблема заключается в том, что из-за «suspend = y» я не могу использовать команду «hadoop» из командной строки, чтобы делать такие вещи, как просмотр очереди заданий; он зависает, я думаю, потому что он ждет подключения отладчика. Кроме того, я не могу запустить «hbase shell», когда нахожусь в этом режиме, вероятно, по той же причине.

В общем, если я хочу переключаться между «режимом отладки» и «нормальным режимом» , мне нужно обновить hadoop-env.shи перезагрузить машину. Основная боль. Итак, у меня есть несколько вопросов:

  1. Есть ли более простой способ отладки заданий mapreduce в eclipse?

  2. Почему eclipse может нормально выполнять мои задачи mapreduce, но для отладки мне нужно использовать удаленную отладку?

  3. Есть ли способ указать Hadoop использовать удаленную отладку для заданий mapreduce, но работать в обычном режиме для всех остальных задач? (, например «очередь hadoop» или «оболочка hbase»).

  4. Есть ли более простой способ переключения hadoop-env.shконфигураций без перезагрузки компьютера? hadoop-env.sh по умолчанию не является исполняемым.

  5. Это более общий вопрос, :что именно происходит, когда я запускаю hadoop только в локальном-режиме? Есть ли на моей машине какие-либо процессы, которые «всегда включены» и выполняют задания Hadoop? Или Hadoop делает что-то только тогда, когда я запускаю команду «hadoop» из командной строки? Что делает eclipse, когда я запускаю задание mapreduce из eclipse? Мне пришлось ссылаться на hadoop-coreв моем pom.xml, чтобы мой проект работал. Отправляет ли eclipse задания моему установленному экземпляру hadoop или каким-то образом запускает все это из hadoop-core-1.0.0.jarв моем кеше maven?

Вот мой основной класс:

public class Main {
      public static void main(String[] args) throws Exception {     
        Job job = new Job();
        job.setJarByClass(Main.class);
        job.setJobName("FirstStage");

        FileInputFormat.addInputPath(job, new Path("/home/sangfroid/project/in"));
        FileOutputFormat.setOutputPath(job, new Path("/home/sangfroid/project/out"));

        job.setMapperClass(FirstStageMapper.class);
        job.setReducerClass(FirstStageReducer.class);

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

        System.exit(job.waitForCompletion(true) ? 0 : 1);
      }
}
15
задан Bob Gilmore 8 December 2014 в 15:19
поделиться