Я запускаю 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
и перезагрузить машину. Основная боль. Итак, у меня есть несколько вопросов:
Есть ли более простой способ отладки заданий mapreduce в eclipse?
Почему eclipse может нормально выполнять мои задачи mapreduce, но для отладки мне нужно использовать удаленную отладку?
Есть ли способ указать Hadoop использовать удаленную отладку для заданий mapreduce, но работать в обычном режиме для всех остальных задач? (, например «очередь hadoop» или «оболочка hbase»).
Есть ли более простой способ переключения hadoop-env.sh
конфигураций без перезагрузки компьютера? hadoop-env.sh по умолчанию не является исполняемым.
Это более общий вопрос, :что именно происходит, когда я запускаю 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);
}
}