Java hadoop NoClassDefFoundError,尽管有DistributedCache设置

Java hadoop NoClassDefFoundError,尽管有DistributedCache设置,java,hadoop,jar,mapreduce,Java,Hadoop,Jar,Mapreduce,由于在运行时找不到一些jar,我正在尝试消除一些NoClassDefFoundError。所以我在我的hdfs系统中放了一些lib,然后我调用了它 String lib = "/path/to/lib"; Path hdfsJar = new Path(lib); DistributedCache.addFileToClassPath(hdfsJar, conf); 现在,我仍然得到错误。但是,如果我在$HADOOP\u类路径中设置jars。DistributedCache调用是否有问题 编

由于在运行时找不到一些jar,我正在尝试消除一些
NoClassDefFoundError
。所以我在我的
hdfs
系统中放了一些lib,然后我调用了它

String lib = "/path/to/lib";
Path hdfsJar = new Path(lib);
DistributedCache.addFileToClassPath(hdfsJar, conf); 
现在,我仍然得到错误。但是,如果我在
$HADOOP\u类路径中设置
jars
DistributedCache
调用是否有问题

编辑:

java.lang.RuntimeException: java.lang.NoClassDefFoundError: gov/nih/nlm/nls/metamap/MetaMapApi
    at org.apache.hadoop.mapreduce.lib.chain.Chain.joinAllThreads(Chain.java:526)
    at org.apache.hadoop.mapreduce.lib.chain.ChainMapper.run(ChainMapper.java:169)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:784)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163)
    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:1628)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.lang.NoClassDefFoundError: gov/nih/nlm/nls/metamap/MetaMapApi
    at org.avrosation.metamap.ChainMetaProcess$TokenizerMapper.map(ChainMetaProcess.java:25)
    at org.avrosation.metamap.ChainMetaProcess$TokenizerMapper.map(ChainMetaProcess.java:16)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)
    at org.apache.hadoop.mapreduce.lib.chain.Chain$MapRunner.run(Chain.java:321)
Caused by: java.lang.ClassNotFoundException: gov.nih.nlm.nls.metamap.MetaMapApi
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 

尝试提供完全限定的HDFS路径。请尝试以下代码:

确保将jar上传到HDFS(我假设是/tmp,HDFS上的任何位置)

然后编辑java代码,如下所示:

String lib = "hdfs://localhost:9000/tmp/my.jar";
Path hdfsJar = new Path(lib);
DistributedCache.addFileToClassPath(hdfsJar, conf); 

此文档详细介绍了分布式缓存:

事实上,我从一开始就怀疑我的
ide
IntelliJ Idea 14
存在一些问题,因为我必须处理代码的重大重构,然后使代码暴露了问题。首先,我试图清理建筑,但没有成功,然后我简单地创建了另一个项目并复制粘贴了类和库的导入,这就成功了

请发布stacktrace。@GergelyBacso我已经编辑了我的帖子。您是否将您的帖子上传到HDFS?你能尝试在变量“String lib”中使用完全限定的hdfs路径吗?@pradeep抱歉,我是hadoop新手-我找到了
hdfs://localhost:9000
as
fs.default.name
但是
Path hdfsJar=newpath(URI.create(lib));addFileToClassPath(hdfsJar,conf)无法识别路径。我该怎么处理呢?仍然得到相同的
NoClassDefFoundError
。。。我真的不明白发生了什么。。。。
String lib = "hdfs://localhost:9000/tmp/my.jar";
Path hdfsJar = new Path(lib);
DistributedCache.addFileToClassPath(hdfsJar, conf);