我不是一个“真正的”开发人员,但我至少有权编写一些代码,并将一些jar添加到eclipse构建路径中,而不必花费数小时试图弄清楚jar是否真的在构建路径中。
我的问题(下面的错误)在[noclassdeffounderror,cannot run mapreducecolorcount(avro 1.7.7)]中通过添加正确的jar得到了解决。
[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)
以下是我尝试向构建路径添加jar的不同方法:
1maven:通过pom文件添加依赖项,它们随后出现在“maven依赖项”下。
2. "configure build path”:jar实际上位于本地文件系统中,因此我添加了(library)文件夹,这些文件夹显示在“referenced libraries”下。
三。在项目文件夹中创建一个“lib”文件夹,复制/粘贴jar(位于我的本地文件系统中),进行项目刷新(lib文件夹出现在包资源管理器中),选择所有jar并右键单击“添加到生成路径”
我确认在执行这两种方法时,我的代码没有显示任何警告/错误。我通常需要导出jar文件的一个“export…”来执行它。
示例:我尝试从cloudera的cdh5(hadoop 2.3.0-cdh5.1.2和avro 1.7.5-cdh5.1.2)中添加构建路径外部jar,这些jar在/opt/lib中本地设置
唯一有效的方法是方法3。为什么方法1不起作用。或者2?
提前感谢您的支持
1条答案
按热度按时间wyyhbhjk1#
我无法用方法3重现成功,我收到了“cannot cast to namespace.customclass”错误,而不是“noclassdeffounderror”错误。
我找到了后一个错误的答案,解决方法基于两个变量:
导出libjars=avrojar1、avrojar2、jar3
导出hadoop\u classpath=avrojar1:avrojar2:jar3
然后用-libjars${libjars}运行hadoopjar命令。用方法1测试。方法三。分别。
我的结论是,我的病例只针对avro相关的jar
谢谢