Używam wasoop w konfiguracji pojedynczej maszyny, tylko lokalna, i szukam ładnego, bezbolesnego sposobu debugowania mappers i reduktorów w czasie zaćmienia. Eclipse nie ma problemu z uruchomieniem zadań mapreduce. Jednak po przejściu do debugowania pojawia się następujący błąd:Jak debugować hadoop mapreduce zadania od Eclipse?
12/03/28 14:03:23 WARN mapred.JobClient: Brak pliku JAR zadania. Klasy użytkowników nie można znaleźć. Zobacz JobConf (Class) lub JobConf # setJar (String).
Okej, więc robię badania. Najwyraźniej powinienem użyć zdalnego debugowania Eclipse siłownia, a dodać do moich hadoop-env.sh
:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5000
to zrobić i mogę przejść przez mojego kodu w Eclipse. Jedynym problemem jest to, że z powodu "suspend = y", nie mogę użyć komendy "hadoop" z wiersza poleceń, aby zrobić coś w stylu kolejki zadań; wisi, wyobrażam sobie, ponieważ czeka na dołączenie debuggera. Ponadto, nie mogę uruchomić "powłoki hbase", gdy jestem w tym trybie, prawdopodobnie z tego samego powodu.
W zasadzie, jeśli chcę, aby przerzucał między trybem debugowania i "trybem normalnym", muszę zaktualizować hadoop-env.sh
i ponownie uruchomić komputer. Poważny ból. Więc mam kilka pytań:
Czy jest łatwiejszy sposób wykonywania zadań mapreduce debugowania w zaćmieniu?
W jaki sposób środowisko Eclipse może uruchamiać zadania mapreduce, ale do debugowania potrzebuję zdalnego debugowania?
Czy istnieje sposób, aby powiedzieć hadoop używać zdalnego debugowania dla zadań mapreduce, ale działać w trybie normalnym dla wszystkich innych zadań? (taki jak "kolejka hadoopów" lub "powłoka hbase").
Czy istnieje łatwiejszy sposób przełączania konfiguracji
hadoop-env.sh
bez ponownego uruchamiania komputera? hadoop-env.sh nie jest domyślnie wykonywany.To jest bardziej ogólne pytanie: co dokładnie dzieje się, gdy uruchamiam Mule w trybie tylko lokalnym? Czy są jakieś procesy na moim komputerze, które są "zawsze włączone" i wykonują zlecenia typu hadoop? Czy też hadoop robi tylko rzeczy, gdy uruchamiam komendę "hadoop" z wiersza poleceń? Co robi zaćmienie, gdy uruchamiam zadanie mapreduce od Eclipse? Musiałem odwołać się do
hadoop-core
w moimpom.xml
, aby mój projekt działał. Czy zadania Eclipse są przesyłane do mojej zainstalowanej instancji hadoop, czy w jakiś sposób działa to wszystko z poziomuhadoop-core-1.0.0.jar
w moim maven cache?
Oto moje główne klasy:
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);
}
}
Jako poza tym, jeśli próbujesz debugować swoją logikę mapper/reduktor, powinieneś zajrzeć do używania MRUnit (http://www.cloudera.com/blog/2009/07/debugging-mapreduce-programs-with-mrunit/) –
Jako że @Chris White sugeruje, aby zacząć od MRUnit, aby przetestować Map/Reduce, logika to dobry pomysł: http://incubator.apache.org/projects/mrunit.html –