ClassNotFoundException
当我运行我的 Hadoop 作业(新 API - 1.0.3)时,我得到了。我有一个Main
包含静态类MapClass
和ReduceClass
嵌套类的类。
我将我的工作配置如下:
Job job = new Job();
job.setJarByClass(Main.class);
job.setJobName("My Job");
job.setMapperClass(Main.MapClass.class);
job.setReducerClass(Main.ReduceClass.class);
主类如下:
public class Main {
//Nested static Mapper
public static class MapClass extends Mapper<Text, Text, Text, Text> {
@Override
public void map(Text key, Text value, Context context) {
...
}
}
// Nested static Reducer
public static class ReduceClass extends Reducer<Text, Text, Text, Text> {
@Override
public void reduce(Text key, Iterable<Text> values, Context context) {
...
}
}
我没有在 Eclipse 创建Main.class
时从项目中导出 jarMain$MapClass.class
和项目Main$ReduceClass.class
文件bin
夹目录中的文件,我认为这应该是类路径的一部分。但是该作业无法找到 Mapper 类:
java.lang.RuntimeException: java.lang.ClassNotFoundException: MapClass
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:867)
at org.apache.hadoop.mapreduce.JobContext.getMapperClass(JobContext.java:199)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:719)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:416)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
问题是什么?