使用hadoop Map Reduce的自定义输出格式时,找不到类异常

时间:2013-10-25 14:25:12

标签: java hadoop mapreduce executable-jar outputformat

我正在尝试运行地图减少工作。我使用eclipse创建了一个可运行的jar,我的输入格式类和输出格式类与启动作业的类位于同一个包中。所有这些都包含在罐子里。我按如下方式设置输入和输出格式类:

job.setInputFormatClass(fully_qualified_name_of_my_input_class.class);
job.setOutputFormatClass(fully_qualified_name_of_my_output_class.class);

但是当我使用hadoop jar myJar.jar执行jar时,我的输出格式类得到了class not found异常,但是我的输入格式类没有得到它。如何纠正这个?这里是stacktrace

java.lang.RuntimeException: java.lang.ClassNotFoundException: my-class-name
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:867)
    at org.apache.hadoop.mapreduce.JobContext.getOutputFormatClass(JobContext.java:235)
    at org.apache.hadoop.mapred.Task.initialize(Task.java:513)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:353)
    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)
Caused by: java.lang.ClassNotFoundException: my-class-name
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:266)
    at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:820)
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:865)
    ... 8 more

2 个答案:

答案 0 :(得分:2)

在设置作业时尝试添加以下内容。

job.setJarByClass(fully_qualified_name_of_my_input_class.class)

有关详细信息,请参阅Hadoop query regarding setJarByClass method of Job class

答案 1 :(得分:0)

抛出

ClassNotFoundException因为JVM无法找到该类。这可能是由于以下原因: -

  1. 真的缺少课程。
  2. 班级在那里,但由于一些错误。 JVM无法找到它。
  3. 在第一种情况下,添加班级

    在第二种情况下,删除bin文件夹中的所有类文件并清理项目。

    现在重新运行您的代码。它将解决异常。