【发布时间】:2014-05-10 22:49:04
【问题描述】:
已解决(解决方案在 cmets 中)
我在 ubuntu 13.10 和 Eclipse Kepler v4.3 上使用 Hadoop 2.2.0(伪分布式模式)来开发我的 Hadoop 程序和动态 Web 项目 (没有 Maven)。
我的 Hadoop jar 项目名为“WorkTest.jar”,当我使用“Hadoop jar WorkTest.jar”从命令行运行作业时,它可以正常工作,并且我在终端上正确地看到了工作进度。
Hadoop项目包含四个要素:
- DriverJob.java(配置和启动作业的类)
- Mapper.java
- Combiner.java
- Reducer.java
现在我用 ServletTest.java 编写了一个新的动态 Web 项目,在其中我输入了 DriverJob 类代码,其他类(Mapper.java、Combiner.java、Reducer.java)是与servlet(主包)放在同一个包中。 WebContent/lib 文件夹包含所有 Hadoop jar 必需的依赖项。
我已经成功地在 WildFly 8 Server whit Eclipse 上部署了我的应用程序,但是当我尝试运行 mapreduce 作业(作业配置成功运行并且我设法在 HDFS 上删除并写入一个文件夹)时,他继续失败并出现以下异常从 Hadoop 作业日志文件中可见:
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).
但是 WildFly 上的 WEB-INF/classes/ deploy 文件夹包含 Mapper.class、Combiner.class 和 Reducer.class。
我也试过在servlet里面输入Mapper、Combiner和Reducer的类代码,但是还是不行,报同样的错误……
我做错了什么?
【问题讨论】:
标签: java eclipse servlets hadoop wildfly