阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

YARN加载本地库抛出Unable to load native-hadoop library解决办法

222次阅读
没有评论

共计 2166 个字符,预计需要花费 6 分钟才能阅读完成。

用官方的 Hadoop 2.1.0-beta 安装后,每次 hadoop 命令进去都会抛出这样一个 Warning

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

设置 logger 级别,看下具体原因

export HADOOP_ROOT_LOGGER=DEBUG,console​

13/08/29 13:59:38 DEBUG util.NativeCodeLoader: Trying to load the custom-built native-hadoop library…
13/08/29 13:59:38 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /usr/local/hadoop/hadoop-2.1.0-beta/lib/native/libhadoop.so.1.0.0: /usr/local/hadoop/hadoop-2.1.0-beta/lib/native/libhadoop.so.1.0.0: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)
13/08/29 13:59:38 DEBUG util.NativeCodeLoader: java.library.path=/usr/local/hadoop/hadoop-2.1.0-beta/lib/native/Linux-amd64-64:/usr/local/hadoop/hadoop-2.1.0-beta/lib/native
13/08/29 13:59:38 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicablewrong ELFCLASS32,难道是加载的 so 文件系统版本不对

执行命令 file libhadoop.so.1.0.0

libhadoop.so.1.0.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped

果然是 80386,是 32 位的系统版本,而我的 hadoop 环境是 64 位 OS
原来直接从 apache 镜像中下载的编译好的 Hadoop 版本 native library 都是 32 版本的,如果要支持 64 位版本,必须自己重新编译,这就有点坑爹了,要知道几乎所有的生产环境都是 64 位的 OS
YARN 官方对于 native library 的一段话验证了这一点
“The pre-built 32-bit i386-Linux native hadoop library is available as part of the hadoop distribution and is located in the lib/native directory​”

重新 checkout source code
svn checkout http://svn.apache.org/repos/asf/hadoop/common/tags/release-2.1.0-beta/
加上编译 native 的选项,编译时会根据当前的操作系统架构来生产相应的 native 库
mvn package -Pdist,native -DskipTests -Dtar
再去 native 文件下查看所有的 file type,已经都是 64 位版的了,替换线上文件,WARNING 消除
file *
libhadoop.a:        current ar archive
libhadooppipes.a:  current ar archive
libhadoop.so:      symbolic link to `libhadoop.so.1.0.0′
libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, not stripped
libhadooputils.a:  current ar archive
libhdfs.a:          current ar archive
libhdfs.so:        symbolic link to `libhdfs.so.0.0.0′
libhdfs.so.0.0.0:  ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, not stripped

更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-06/132561.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计2166字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中