启动或执行Hadoop | Spark程序时出现警告
18/01/22 17:50:39 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
原因分析
这是因为 $HADOOP_HOME/lib/native
包中的 /libhadoop.so
和 libhadoop.so.1.0.0
是32位导致的,这在Hadoop低版本中出现,可以通过 file
命令查看文件是32位还是64位的.
[elon@spark hadoop-2.7.5]$ file lib/native/*
lib/native/libhadoop.a: current ar archive
lib/native/libhadooppipes.a: current ar archive
lib/native/libhadoop.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
lib/native/libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
lib/native/libhadooputils.a: current ar archive
lib/native/libhdfs.a: current ar archive
lib/native/libhdfs.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
lib/native/libhdfs.so.0.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
解决方案
因此,我们可以看到官方给出的解决方案是:
● 在64位机上重新编译Hadoop源码 Compile Apache Hadoop on Linux (fix warning: Unable to load native-hadoop library)
● 以及参考stack flow上的解决方案:Hadoop “Unable to load native-hadoop library for your platform” warning
但是在Hadoop2.7以后的版本中,$HADOOP_HOME/lib/native
包下的文件都改为了64位,不存在版本差异化的问题,而仍然显示无法加载Hadoop本地库 (Unable to load native-hadoop library for your platform.) 这时候,通过root用户在 /etc/profile
中设置全局环境变量 export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native
(ps:首先用命令 echo $JAVA_LIBRARY_PATH
查看是否存在,若本身就有值,则上述命令设置为如下形式: export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
,表明是在原环境变量 JAVA_LIBRARY_PATH
后面加上新参数 $HADOOP_HOME/lib/native
)
通过以上的博客内容,可以清除这个警告信息。
转载请注明出处:http://blog.youkuaiyun.com/coder__cs/article/details/79132707
本文出自【elon33的博客】