我爱编程

关于hadoop下 Unable to load native-

2017-12-20  本文已影响0人  Moiral

  在hadoop的学习过程中,遇到了WARN util.NativeCodeLoader: Unable to load native-hadoop library for yourplatform... using builtin-java classes where applicable的警告。尽管并不影响程序的正常运行,但每次使用hdfs命令时弹出警告还是略微影响使用体验的。因此,将调试过程记录如下:


  写在前面:Hadoop本地库是为了提高效率或者某些不能用Java实现的功能组件库。目前只支持 *unix, 在Mac OS X和Cygwin上不提供直接支持。因此需要自己重新编译,这里有篇文章可供参考:Mac OSX 下 Hadoop 使用本地库提高效率

1.确认OS位数,JDK位数,Hadoop本地库位数是否一致
  OS位数查看方法:uname -a
  JDK位数查看方法:java -version
  Hadoop本地库位数查看方法:进入hadoop下的lib/native文件夹下 ldd libhadoop.so.1.0.0
2.路径问题
开启debug:直接在shell下运行下以下代码

export HADOOP_ROOT_LOGGER=DEBUG,console

此时通过hdfs dfs -ls来查看输出并找到如下记录

DEBUG util.NativeCodeLoader: java.library.path=/usr/local/hadoop/lib/

如果记录与之类似,即没有/lib/native/结尾的路径,说明问题的原因出在path问题上,本地库的路径并没有被正确的加载。

解决方法:
在/HADOOP_HOME/etc/hadoop/中的hadoop_env.sh中修改如下信息:

export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"

再次执行hdfs dfs -ls并查看输出,若path仍未以native/结尾,返回根目录下执行echo $PATH,查看$HADOOP_HOME的路径是否正确输出,若不存在Hadoop的路径,则通过修改.bash_profile或者/etc/profile文件配置好Hadoop路径并通过source /etc/profile来使配置生效

3.链接文件问题
查看native文件夹下libhadoop.solibhdfs.so文件是否存在,若不存在,做符号链接之。若存在但文件大小为0,删除并重新做符号链接

ln -s libhadoop.so.1.0.0 libhadoop.so
ln -s libhdfs.so.0.0.0 libhdfs.so
上一篇下一篇

猜你喜欢

热点阅读