java中的ClassNotFoundException?

时间:2013-08-30 18:22:24

标签: java maven hbase

我正在尝试从这个特定网站运行示例: https://github.com/larsgeorge/hbase-book/tree/master/ch07

现在..它成功编译

但是当我尝试运行一个例子时,它给了我以下异常:

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:115)
    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:1093)
    at org.apache.hadoop.mapred.Child.main(Child.java:249)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
    at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:113)
    ... 7 more
Caused by: java.lang.NoClassDefFoundError: org/json/simple/parser/JSONParser
    at mapreduce.ParseJson2$ParseMapper.<init>(ParseJson2.java:48)
    ... 12 more
Caused by: java.lang.ClassNotFoundException: org.json.simple.parser.JSONParser
    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)
    ... 13 more

现在从这个文件中的pom,我可以看到包含简单的json,但我不确定为什么会抛出这个问题。?

1 个答案:

答案 0 :(得分:0)

我会说问题是当在map-reduce下运行时,你需要的jar不在范围内(即找不到)。解决这个问题的一种方法是创建一个包含所有依赖项的jar并将其作为作业提交。其他选项是确保它在每个节点中都可用,并将depunddecies部署到Hadoops的分布式缓存(但第一个是最简单的 - 尽管由于jar更大而导致较慢的作业启动)