РЕШЕНО (решението е в коментарите)
Използвам Hadoop 2.2.0 (в псевдо-разпространен режим) на ubuntu 13.10 и Eclipse Kepler v4.3, за да разработя моята програма Hadoop и Dynamic Web Project (без Maven ).
Моят проект Hadoop jar, наречен "WorkTest.jar", работи правилно, когато стартирам задание от командния ред с: "Hadoop jar WorkTest.jar" и виждам правилно напредъка на работата на терминала.
Проектът Hadoop съдържа четири елемента:
- DriverJob.java (клас, който конфигурира и стартира заданието)
- Mapper.java
- Combiner.java
- Редуктор.java
Сега написах нов динамичен уеб проект с ServletTest.java, в който въведох кода на класа DriverJob, другият клас (Mapper.java, Combiner.java, Reducer.java) се поставят в същия пакет като сървлета (основен пакет). Папката WebContent/lib съдържа всички необходими зависимости на Hadoop jar.
Успешно разположих приложението си на WildFly 8 Server с Eclipse, но когато се опитам да стартирам mapreduce задание (конфигурацията на заданието се изпълнява успешно и успях да изтрия и запиша папка на HDFS), той продължава да се проваля със следното изключение, видимо от Регистрационен файл на Hadoop Job:
FATAL [IPC Server handler 5 on 46834] org.apache.hadoop.mapred.TaskAttemptListenerImpl: Task: attempt_1396015900746_0023_m_000002_0 - exited : java.lang.RuntimeException: java.lang.ClassNotFoundException: Class Mapper not found
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1720)
at org.apache.hadoop.mapreduce.task.JobContextImpl.getMapperClass(JobContextImpl.java:186)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:721)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:339)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:162)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:157)
Caused by: java.lang.ClassNotFoundException: Class Mapper not found
at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1626)
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1718)
... 8 more
и от регистрационния файл на WildFly:
WARN [org.apache.hadoop.mapreduce.JobSubmitter] Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.
WARN [org.apache.hadoop.mapreduce.JobSubmitter] No job jar file set. User classes may not be found. See Job or Job#setJar(String).
Но папката WEB-INF/classes/ deploy на WildFly, съдържаща Mapper.class, Combiner.class и Reducer.class.
Също така се опитах да въведа кода на класа на Mapper, Combiner и Reducer вътре в сервлета, но не работи със същата грешка...
Какво правя грешно?