乐趣区

关于hadoop:hadoop-start-namenode-deamon-and-datanode-deamon-failed

执行命令 hadoop/sbin/start-dfs.sh 失败,报错信息如下:

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Incorrect configuration: namenode address dfs.namenode.servicerpc-address or dfs.namenode.rpc-address is not configured.
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable


查找起因:
1、查看更具体的 debug 信息

 执行命令 export HADOOP_ROOT_LOGGER=DEBUG,console,而后再执行命令 hadoop/sbin/start-dfs.sh,发现 version `GLIBC_2.14' not found:Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /usr/local/hadoop/lib/native/libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/local/hadoop/lib/native/libhadoop.so.1.0.0)

 好了,当初发现问题了,是查找 GLIBC_2.14 这个货色找不到,那么接下来就来理解一下这是个什么货色,怎样才能让 hadoop 找到这个货色。

2、GLIBC 是什么

glibc 是 GNU 公布的 libc 库,即 c 运行库。glibc 是 linux 零碎中最底层的 api,简直其它任何运行库都会依赖于 glibc。glibc 除了封装 linux 操作系统所提供的零碎服务外,它自身也提供了许多其它一些必要性能服务的实现…

3、/lib64/libc.so.6 是什么

libc.so.6 是 c 运行时库 glibc 的软链接,而零碎简直所有程序都依赖 c 运行时库。程序启动和运行时,是依据 libc.so.6 软链接找到 glibc 库。每个 glibc.so 文件有它反对的 libc 版本,能够通过 strings /lib64/libc.so.6 |grep GLIBC 查看,肯定要抉择这条命令列出的版本。如果程序编译的时候链接的 libc 库版本不在程序运行环境下的 glibc 库反对的 libc 版本之内,也会报错。于是,零碎的所有命令 ls,cp,cd 等等都无奈应用了。

4、查看零碎的 GLIBC 版本

 执行命令 strings /lib64/libc.so.6 |grep GLIBC
发现反对的最大版本是 GLIBC_2.12,而 hadoop 错误信息里提到须要 GLIBC_2.14

    好了,当初咱们就想方法来增加 GLIBC_2.14 或更高版本,当初要思考降级到哪个版本呢?查资料发现:对于 CentOS 这样的零碎,为了谋求稳定性往往各种库版本都很低,比方 6.5(我的机器零碎版本)自带的还是 glibc2.12, 而 ubuntu 14.04 带 glibc2.19,如果降级根本 C 运行库到一个太新的版本,可能会影响 CentOS 的运行。所以我抉择降级一个刚好够用的版本 GLIBC_2.14,能解决问题就好,不找麻烦,嘻嘻。当初就来解决理论的问题:搭配这里找须要的版本 http://ftp.gnu.org/gnu/glibc/

5、下载 GLIBC_2.14 包

wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz

6、解压 GLIBC_2.14 包

tar -zxf glibc-2.14.tar.gz

7、编译

cd  glibc-2.14, 建设长期目录 mkdir build
cd build 
执行../configure --prefix=/usr/local/glibc-2.14 指定装置目录为 /usr/local/glibc-2.14
执行 make && make install 装置
cp /usr/local/glibc-2.14/lib/libc-2.14.so /lib64/ , 也就是把
编译好的 so 复制到 /lib64 上面 

8、装置

 重建软件,这一步最重要,操作不当,零碎会间接无奈应用
cd /lib64
删除旧的文件 LD_PRELOAD=/lib64/libc-2.12.so rm libc.so.6
更新为新的文件 LD_PRELOAD=/lib64/libc-2.14.so ln -s /lib64/libc-2.14.so libc.so.6
注:libc.so.6 只是一个软连,删除后可能会导致 ls 等命令都无奈失常应用。这时不要慌乱,能够通过 LD_PRELOAD 环境变量来解决。

9、查看更新胜利

strings /lib64/libc.so.6 |grep GLIBC


10、再次执行./sbin/start-dfs.sh 没有报错信息了

退出移动版