Я запускаю hasoop в одиночной машине, только для локальных настроек, и я ищу хороший, безболезненный способ отладки карт и редукторов в eclipse. У Eclipse нет проблем с выполнением задач mapreduce. Однако, когда я иду на отладку, он дает мне эту ошибку:
12/03/28 14:03:23 WARN mapred.JobClient: не задан файл jar файла. Пользовательские классы не могут быть найдены. См. JobConf (класс) или 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, но работать в нормальном режиме для всех других задач? (например, "queue queue" или "hbase shell" ).
-
Есть ли более простой способ переключения конфигураций
hadoop-env.sh
без перезагрузки моей машины? По умолчанию hasoop-env.sh не исполняется. -
Это более общий вопрос: что именно происходит, когда я запускаю hadoop в локальном режиме? Существуют ли какие-либо процессы на моей машине, которые "всегда включены" и выполняются рабочие задания? Или hasoop только делает что-то, когда я запускаю команду "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);
}
}