WARNutil.NativeCodeLoader:Unabletoloadnative-hadooplibraryforyourplatform..
启动或执行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)
通过以上的博客内容,可以清除这个警告信息。