我不是一个“真正的”开发人员,但是我有权至少编写一些代码,并将一些Jars添加到Eclipse的构建路径中,而无需花费数小时试图弄清楚Jars是否确实在构建路径中。
我的问题(下面的错误)已通过添加正确的Jars来解决了[NoClassDefFoundError, cannot run MapReduceColorCount (Avro 1.7.7)。
[cloudera@localhost ~]$ hadoop jar avroColorCount.jar exos.MapReduceColorCount2 inavro01 outavro01
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/avro/mapreduce/AvroKeyInputFormat
at exos.MapReduceColorCount2.run(MapReduceColorCount2.java:71)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
at exos.MapReduceColorCount2.main(MapReduceColorCount2.java:86)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
以下是我尝试将Jars添加到构建路径的不同方法:
1. Maven :通过POM文件添加依赖关系,它们随后显示在“Maven依赖关系”下。
2.“配置构建路径” :Jars实际上位于我的本地文件系统中,因此我添加了(库)文件夹,并且这些文件夹出现在“引用库”下。
3.在项目文件夹中创建一个“lib”文件夹,复制/粘贴Jars(位于我的本地文件系统中),刷新项目(lib文件夹出现在Package Explorer中),选择所有Jars,然后右键单击-点击“添加到构建路径”
我确认执行任何一种方法时我的代码均未显示警告/错误。我通常会执行Jar文件的“导出...”操作。
示例:我尝试将Cloudera的CDH5(Hadoop 2.3.0-cdh5.1.2和Avro 1.7.5-cdh5.1.2)添加到构建路径中,这些外部Jars本地位于/ opt / lib中
唯一有效的方法是方法3 。为什么它不适用于方法1.或2.?
预先感谢您对我们的支持
最佳答案
我无法使用方法3重现成功,我收到了“无法转换为namespace.customClass”错误,而不是“NoClassDefFoundError”错误。
我已经找到了针对后一种错误的答案,并提供了基于两个变量导出的解决方法:
出口LIBJARS = avrojar1,avrojar2,jar3
导出HADOOP_CLASSPATH = avrojar1:avrojar2:jar3
然后使用-libjars $ {LIBJARS}运行hadoop jar命令。
分别使用方法1.和方法3进行了测试。
我的结论是,我的案件仅针对与avro相关的Jars
谢谢
关于eclipse - Eclipse:混淆添加到构建路径选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25804826/