java - hadoop NoClassDefFoundError 尽管 DistributedCache 设置

标签 java hadoop jar mapreduce

我试图摆脱一些NoClassDefFoundError由于一些 jars运行时找不到。所以我输入了我的hdfs系统一些库,我打电话,我把这个

String lib = "/path/to/lib";
Path hdfsJar = new Path(lib);
DistributedCache.addFileToClassPath(hdfsJar, conf); 

现在,我仍然收到错误消息。但是,如果我设置 jars$HADOOP_CLASSPATH .我对 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(hdfs 上的任何位置,我假设/tmp)。

hadoop fs -copyFromLocal my.jar /tmp

然后编辑您的java代码,如:
String lib = "hdfs://localhost:9000/tmp/my.jar";
Path hdfsJar = new Path(lib);
DistributedCache.addFileToClassPath(hdfsJar, conf); 

这篇关于分布式缓存的文档详细信息:https://hadoop.apache.org/docs/stable/api/org/apache/hadoop/filecache/DistributedCache.html

关于java - hadoop NoClassDefFoundError 尽管 DistributedCache 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32523293/

相关文章:

java - 返回结果集会减慢程序速度

hadoop - MapReduce 旧 API - 将命令行参数传递给 map

eclipse - 用于Hadoop 2的Pig 0.13.0的Ant构建失败

java - 添加索引到 jar 文件,引用外部 jar 文件

java - Java中是否有任何(无限制的)公平阻塞队列?

java - 为什么我尝试使用 getActionCommand 时出现空指针异常

Java:有效的数据结构来存储没有 'logical' 重复项的对象

hadoop - 无法打开 hadoop localhost :9000

java - 如何从对 Play Framework 的依赖中获取文件

android - LibGDX - Intellij - 添加 Jar