当我运行Hadoop作业(新API - 1.0.3)时,得到了ClassNotFoundException
。 我有一个Main
类包含静态MapClass
和ReduceClass
作为嵌套类。Hadoop无法找到映射程序
配置我的工作如下:
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
,Main$MapClass.class
和Main$ReduceClass.class
文件bin
项目文件夹的目录,我认为它应该是classpath的一部分。 但是工作是无法找到映射器类:
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)
问题是什么?
你如何运作你的工作? – Razvan 2012-07-21 07:44:42
@Razvan:我从Eclipse运行我的工作 - Cntr + F11 – abhinavkulkarni 2012-07-21 07:47:39
使用Hadoop安装目录/ bin目录中的hadoop脚本运行它 – Razvan 2012-07-21 07:48:45