Я использую hadoop на одной машине, локально, и я ищу хороший, безболезненный способ отладки картографов и редукторов в Eclipse. Eclipse не имеет проблем при выполнении задач mapreduce. Однако, когда я иду к отладке, это дает мне эту ошибку:
12/03/28 14:03:23 WARN mapred.JobClient: Не задан файл JAR задания. Пользовательские классы могут быть не найдены. См. JobConf (Класс) или JobConf # setJar (Строка).
Хорошо, я проведу небольшое исследование. По-видимому, я должен использовать средство удаленной отладки eclipse и добавить это к моему hadoop-env.sh
:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5000
Я делаю это и могу пройти по своему коду в затмении. Единственная проблема заключается в том, что из-за «suspend = y» я не могу использовать команду «hadoop» из командной строки для таких вещей, как просмотр очереди заданий; он зависает, я представляю, потому что он ждет отладчика для подключения. Кроме того, я не могу запустить "hbase shell", когда я в этом режиме, возможно, по той же причине.
Так что, в принципе, если я хочу переключаться между "режимом отладки" и "нормальным режимом" , мне нужно обновить hadoop-env.sh
и перезагрузить компьютер. Сильная боль. Итак, у меня есть несколько вопросов:
Есть ли более простой способ отладки заданий mapreduce в eclipse?
Почему eclipse может нормально выполнять мои задания mapreduce, но для отладки мне нужно использовать удаленную отладку?
Есть ли способ указать hadoop использовать удаленную отладку для заданий mapreduce, но работать в обычном режиме для всех других задач? (например, "очередь очереди" или "оболочка 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);
}
}