赞
踩
转载:http://blog.csdn.net/xichenguan/article/details/38797331
至今为止,搭建的所有集群里都有这个错误:
今天到公司无偿加班,完成自定任务后,又尝试着解决这个问题,竟然Okay了。
1.系统是64位的;JDK是64位的;hadoop本地库也是64位的,自己编译的。
2.打开hadoop控制台debug输出
1)no hadoop in java.library.path:在java的本地库路径中没有找到hadoop的本地库
2)java.library.path=/op/hadoop-2.4.1/lib :本地库路径是/op/hadoop-2.4.1/lib
去/op/hadoop-2.4.1/lib路径下面查看,只一个native目录,native目录下面才是hadoop的本地库。
3.想到之前在网上找答案的时候,有个版本是让在环境变量加上下面这两句话:
第一个配置应该是没有问题
就是第二个的事了,将第二个配置改成:
启动NameNode,然后运行一个命令看看:
5.hadoop本地库明明就在native目录下面,亲眼看见的,NameNode也生效了,怎么在DataNode节点的机器上就找不到!!
没办法了,看源码吧,在org.apache.hadoop.util.NativeCodeLoader.java中有这样一段代码
发现代码中加载的类库的名字是hadoop,也就是在linux操作系统上,这个文件的名是libhadoop.so。
6.去native目录下面ll一下:
7.就去NameNode端的native目录下面看一下,发现是这样的:
应该就是问题所在了,于是将DataNode端的libhadoop.so和libhdfs.so删除,然后重做符号链接。就可以了。
8.总结一下,就是有3个地方需要注意:
1)OS位数,JDK位数,Hadoop本地库位数要一致
2)配置java.library.path能够找到Hadoop的本地库。
3)Hadoop自己要找的本地库的名字是libhadoop.so这个文件,确保有这个文件,这个文件时libhadoop.so.1.0.0这个文件的软链接,libhdfs.so也是同样的情况Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。