美文网首页我爱编程
关于hadoop下 Unable to load native-

关于hadoop下 Unable to load native-

作者: Moiral | 来源:发表于2017-12-20 12:55 被阅读0次

      在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
    

    相关文章

      网友评论

        本文标题:关于hadoop下 Unable to load native-

        本文链接:https://www.haomeiwen.com/subject/sujwwxtx.html