开发者社区> 一见蓝天> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

loadFileSystems error & ExceptionUtils错误原因分析

简介: loadFileSystems error & ExceptionUtils错误原因分析 一见 2014/5/7   C/C++程序通过hdfs.
+关注继续查看

loadFileSystems error & ExceptionUtils错误原因分析

一见 2014/5/7

 

C/C++程序通过hdfs.h访问HDFS,运行时遇到如下错误,会是什么原因了?(注:hadoop安装在/data/hadoop/hadoop-2.4.0,而/data/hadoop/current是指向它的软链接)

loadFileSystems error:

(unable to get stack trace for java.lang.NoClassDefFoundError exception: ExceptionUtils::getStackTrace error.)

hdfsBuilderConnect(forceNewInstance=0, nn=172.25.40.171, port=9001, kerbTicketCachePath=(NULL), userName=(NULL)) error:

(unable to get stack trace for java.lang.NoClassDefFoundError exception: ExceptionUtils::getStackTrace error.)

E0507 19:02:57.251287 17859 hdfs_persistence.cpp:31] connect hdfs://172.25.40.171:9001 error: 未知的错误 255

 

上述信息中的关键项是“NoClassDefFoundError”和“ExceptionUtils”,也就是找不到ExceptionUtils,一般可推断是因为找不到相应的jar文件,Google搜索“ExceptionUtils  jar”,发现“ExceptionUtils”应当是在包apache-commons-lang.jar中。

进一步用Google去搜索“apache-commons-lang.jar”,找到下载网址:http://commons.apache.org/proper/commons-lang/download_lang.cgi,上面可以下载commons-lang3-3.3.2-bin.tar.gz,解压后就可以看到commons-lang3-3.3.2.jar。

hadoop的二进制安装包,应当自带了这个文件,通过努力,在hadoop安装目录下的share/hadoop/tools/lib子目录下发现了commons-lang-2.6.jar,应当就是它了。

 

使用命令“hadoop classpath”可以,可以查看hadoopclasspath

./hadoop classpath

/data/hadoop/hadoop-2.4.0/etc/hadoop:/data/hadoop/hadoop-2.4.0/share/hadoop/common/lib/*:/data/hadoop/hadoop-2.4.0/share/hadoop/common/*:/data/hadoop/hadoop-2.4.0/share/hadoop/hdfs:/data/hadoop/hadoop-2.4.0/share/hadoop/hdfs/lib/*:/data/hadoop/hadoop-2.4.0/share/hadoop/hdfs/*:/data/hadoop/hadoop-2.4.0/share/hadoop/yarn/lib/*:/data/hadoop/hadoop-2.4.0/share/hadoop/yarn/*:/data/hadoop/hadoop-2.4.0/share/hadoop/mapreduce/lib/*:/data/hadoop/hadoop-2.4.0/share/hadoop/mapreduce/*:/data/hadoop/current/contrib/capacity-scheduler/*.jar

 

遗憾的是,tools并没有出现,这应当就是问题所在,于是手工将它加进去(hadoop被安装在/data/hadoop/current):

export CLASSPATH=`/data/hadoop/current/bin/hadoop classpath`:/data/hadoop/current/share/hadoop/tools/lib

 

重运行,发现还是不行:

loadFileSystems error:

(unable to get stack trace for java.lang.NoClassDefFoundError exception: ExceptionUtils::getStackTrace error.)

hdfsBuilderConnect(forceNewInstance=0, nn=172.25.40.171, port=9001, kerbTicketCachePath=(NULL), userName=(NULL)) error:

(unable to get stack trace for java.lang.NoClassDefFoundError exception: ExceptionUtils::getStackTrace error.)

E0507 19:52:48.197748 27787 hdfs_persistence.cpp:31] connect hdfs://172.25.40.171:9001 error: 未知的错误 255

 

好吧,来把硬的,直接指定commons-lang-2.6.jar

export CLASSPATH=`/data/hadoop/current/bin/hadoop classpath`:/data/hadoop/current/share/hadoop/tools/lib/commons-lang-2.6.jar

 

重新运行程序,ExceptionUtils错误消失了,但遇到新错误:

loadFileSystems error:

java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FileSystem

Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.fs.FileSystem

        at java.net.URLClassLoader$1.run(URLClassLoader.java:372)

        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)

        at java.security.AccessController.doPrivileged(Native Method)

        at java.net.URLClassLoader.findClass(URLClassLoader.java:360)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

hdfsBuilderConnect(forceNewInstance=0, nn=172.25.40.171, port=9001, kerbTicketCachePath=(NULL), userName=(NULL)) error:

java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration

Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.conf.Configuration

        at java.net.URLClassLoader$1.run(URLClassLoader.java:372)

        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)

        at java.security.AccessController.doPrivileged(Native Method)

        at java.net.URLClassLoader.findClass(URLClassLoader.java:360)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

E0507 19:12:56.522274 19834 hdfs_persistence.cpp:31] connect hdfs://172.25.40.171:9001 error: 未知的错误 255

 

仍然是NoClassDefFoundError错误,原因应当是一样的:classpath中漏了哪个目录,这就要看FileSystemConfiguration在哪个jar中了。

FileSystem是在hadoop-common-2.4.0.jar中,而Configurationcommons-configuration-1.6.jar中,它们两个都已经在classpath上,为何还报错了?

 

java不熟,尝试将hadoop-common-2.4.0.jarcommons-configuration-1.6.jar直接加入到classpath

export CLASSPATH=`/data/hadoop/current/bin/hadoop classpath`:/data/hadoop/current/share/hadoop/tools/lib/commons-lang-2.6.jar:/data/hadoop/current/share/hadoop/common/hadoop-common-2.4.0.jar:/data/hadoop/current/share/hadoop/common/lib/commons-configuration-1.6.jar

 

 

发现FileSystemConfiguration错误消失了,说明有效:

loadFileSystems error:

java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

        at org.apache.hadoop.fs.FileSystem.<clinit>(FileSystem.java:95)

Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory

        at java.net.URLClassLoader$1.run(URLClassLoader.java:372)

        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)

        at java.security.AccessController.doPrivileged(Native Method)

        at java.net.URLClassLoader.findClass(URLClassLoader.java:360)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

        ... 1 more

hdfsBuilderConnect(forceNewInstance=0, nn=172.25.40.171, port=9001, kerbTicketCachePath=(NULL), userName=(NULL)) error:

java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

        at org.apache.hadoop.conf.Configuration.<clinit>(Configuration.java:169)

Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory

        at java.net.URLClassLoader$1.run(URLClassLoader.java:372)

        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)

        at java.security.AccessController.doPrivileged(Native Method)

        at java.net.URLClassLoader.findClass(URLClassLoader.java:360)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

        ... 1 more

 

通过寻找,LogFactorytools目录下的commons-logging-1.1.3.jar中,把它也加入到classpath中:

export CLASSPATH=`/data/hadoop/current/bin/hadoop classpath`:/data/hadoop/current/share/hadoop/tools/lib/commons-lang-2.6.jar:/data/hadoop/current/share/hadoop/common/hadoop-common-2.4.0.jar:/data/hadoop/current/share/hadoop/common/lib/commons-configuration-1.6.jar:/data/hadoop/current/share/hadoop/common/lib/commons-logging-1.1.3.jar

 

再次运行,还是报错:

java.util.ServiceConfigurationError: org.apache.hadoop.fs.FileSystem: Provider org.apache.hadoop.fs.viewfs.ViewFileSystem could not be instantiated: java.lang.NoClassDefFoundError: com/google/common/collect/Maps

        at java.util.ServiceLoader.fail(ServiceLoader.java:232)

        at java.util.ServiceLoader.access$100(ServiceLoader.java:185)

        at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:384)

        at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)

        at java.util.ServiceLoader$1.next(ServiceLoader.java:480)

        at org.apache.hadoop.fs.FileSystem.loadFileSystems(FileSystem.java:2364)

 

还是类似的错误,这样下会去搞死人。通过上述的一些操作,估计需要将所有的jar文件一个个的将入到classpath中。由于对java不熟悉,也只有先这样做一做了:

find /data/hadoop/current/ -name *.jar|awk '{ printf("export CLASSPATH=%s:$CLASSPATH\n", $0); }'

 

终于可以了^_^,好折腾啊。

 

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Spring 全家桶之 Spring Web MVC(九)- Exception(上)
Spring 全家桶之 Spring Web MVC(九)- Exception
10 0
Spring 全家桶之 Spring Web MVC(九)- Exception(下)
Spring 全家桶之 Spring Web MVC(九)- Exception
11 0
SpringBoot幂等性防重token令牌实现方案(redis+annoation+interceptor实现)
SpringBoot幂等性防重token令牌实现方案(redis+annoation+interceptor实现)
79 0
SAP APF框架错误消息Filter is too complex的处理
SAP APF框架错误消息Filter is too complex的处理
15 0
SAP LSMW Error - You have not fully maintained the descriptions - 之分析
SAP LSMW 导入物料主数据报错 - You have not fully maintained the descriptions - 之分析 近日,笔者忙于在D项目上的主数据导入。
1966 0
部署web项目时tomcat出现 Exception in thread &amp;quot;main&amp;quot;错误
最主要原因:容器使用的JDK版本不匹配 比如tomcat7 就不支持JDK5,这是根本性的问题, 解决方法:根据对应的tomcat使用相匹配的JDK, (因为我之前有一个项目用的是JDK1.
1068 0
SAP Error -Combination of GR/IR control not allowed for external services-
SAP MM ME22N 试图取消 ‘GR-Bsd IV’,error- Combination of GR/IR control not allowed for external services-   ME...
2044 0
+关注
一见蓝天
擅长面向对象设计、C++程序开发,在金山和华为呆过,互联网从业十多年,有分布式计算和存储系统经验。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载