我在编译过程中遇到以下错误。我正在使用eclipseide和ubuntu。我在构建路径1)pdfbox 1.8.13及其所有依赖项2)commons-logging-1.2中添加了以下jar文件。
请告诉我为什么在jar文件中的类有错误?
Error: java.lang.ClassNotFoundException: org.apache.pdfbox.pdmodel.PDDocument
at java.net.URLClassLoader$1.run(URLClassLoader.java:359)
at java.net.URLClassLoader$1.run(URLClassLoader.java:348)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:347)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:312)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at com.hadoopexpert.PdfRecordReader.initialize(PdfRecordReader.java:41)
at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.initialize(MapTask.java:521)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:763)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:364)
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:421)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
2条答案
按热度按时间q35jwt9p1#
类位于构建路径上,因此它可以编译,但显然在运行二进制文件的类路径中没有它,这就是它不运行的原因。确保您的应用程序的类路径包含您添加的所有jar(或者使用一些构建系统,比如maven或gradle,它可以为您实现自动化)。
vawmfj5a2#
通过执行以下更改解决了我的查询
1) 将pdfbox的jar文件也放在hadoop lib文件夹中(使库jar在运行时对hadoop可用)。
2) 重新启动hadoop集群。
或
1) 通过将pdfbox库放在分布式缓存中,确保它对hadoop可用。
https://stackoverflow.com/a/34179783/8956991