最初在CentOS6.5 *64上部署hadoop2.6.0,在启动时提示
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
在stackoverflow查了一下,刚开始我也以为是编译问题造成的,后来仔细排查了一下,并非编译问题。
[thread@thread native]$ ldd libhadoop.so.1.0.0
./libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
linux-vdso.so.1 => (0x00007fffb1dff000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007ffb4eb1a000)
libc.so.6 => /lib64/libc.so.6 (0x00007ffb4e785000)
发现没有,根本问题出在GLIBC版本上。之所以编译可以解决,是由于重新编译的GLIBC是由本地库支持的,所以根本问题出在这里。
知道了问题出现的根本原因解决也就相应容易的多了。
Glibc下载地址
选择对应版本的Glibc,tar.gz和tar.xz只是压缩格式不一样
tar -xvf glibc+版本号($glibc) -C 解压目标路径($disPath)
接下来glibc以$glibc代替,解压目标路径以$disPath代替
cd $disPath
mkdir build
cd build
../$glibc/configure --prefix=/usr/lib64/$glibc --enable-add-ons
注意,不能在源代码基础上直接configure,所以构建build目录。configure –prefix尽量别乱改,之后会比较好维护。
–enable-add-ons将会对lib进行更新,若选择这一项,则不需要再设置动态库加载。
make
make install
安装完之后cd /usr/lib64/$glibc应该是可以访问的,编译之后的动态库应该都在这里了。
此时动态库还未加载,最后进行加载。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/$glibc/lib
此时,再看一下
ldd libhadoop.so.1.0.0