WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...的解决方案

来源:互联网 发布:数据库范式 编辑:程序博客网 时间:2024/06/05 23:57

在执行hdfs dfs 相关命令时会报WARN util.NativeCodeLoader: Unable to load native-hadoop library foryour platform… using builtin-java classes where applicable的错误。

错误分析:

从错误的提示中可以看到,是报本地代码装载器的错误,你使用的平台(操作系统)无法加载本地hadoop类库,使用可以应用的内置Java类。

让我们来看看具体是什么原因:

打开命令行终端,敲入命令:vi /etc/profile 在最后一行加入:export HADOOP_ROOT_LOGGER=DEBUG,console 保存退出,设置logger级别,让其在控制台打印日志信息,再敲入命令source /etc/profile,刷新设置。

在保证已开启hadoop后敲入命令:hdfs dfs -ls /(只要执行hdfs dfs相关命令即可)

DEBUG util.NativeCodeLoader: Trying to load the custom-built native-hadoop library...DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /usr/hadoop/hadoop-2.4.1/lib/native/libhadoop.so.1.0.0......

从打印的信息中可以看出是native下的libhadoop.so.1.0.0报错,那我们来看看这个文件的信息,在命令终端进入native目录,敲入: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

该文件是32位的系统版本,而我们使用的hadoop环境是64位操作系统,lib包编译环境不一样,所以不能使用

原来直接从apache镜像中下载的编译好的Hadoop版本native library都是32版本的,如果要支持64位版本,必须自己重新编译

那么,如何重新编译,下面以编译hadoop2.4.1为例,步骤如下:

1.安装svn(版本控制器),敲入命令yum install svn,然后创建需要保存hadoop的release-2.4.1文件的文件夹,敲入命令:mkdir /usr/local/svn,进入svn目录后敲入命令:svn checkout 'http://svn.apache.org/repos/asf/hadoop/common/tags/release-2.4.1'


如果看到以上截图的就说明已经下载好了

2.安装编译时需要的各种Linux包,敲入命令yum install autoconfautomake libtool cmake ncurses-devel openssl-devel gcc* --nogpgcheck

3.下载apache-maven-3.3.1-bin.tar压缩包(项目管理工具):地址:链接:http://pan.baidu.com/s/1wbebW 密码:7544

下载好后拷贝到Linux的桌面,敲入命令:mkdir /usr/local/maven,创建maven文件夹,再解压刚才下载的压缩包:tar -zxvf  Desktop/apache-maven-3.3.1-bin.tar.gz -C /usr/local/maven/

4.安装protobuf-2.4.1.tar.gz压缩包(开源序列化框架):地址:链接:http://pan.baidu.com/s/1hqH3Afi 密码:iq5k

下载好后拷贝到Linux的桌面,敲入命令:mkdir /usr/local/protobuf,创建protobuf文件夹,再解压刚才下载的压缩包:tar -zxvf  Desktop/protobuf-2.5.0.tar.gz -C /usr/local/protobuf/

进入解压的文件:cd protobuf-2.5.0,再执行命令:./configure --prefix=/usr/local/protoc/

之后再依次执行三条命令: 1.make    2.make check   3.make install

添加环境变量,敲入命令:vi /etc/profile,删掉刚才设置的logger输入方式,再最后添加两行信息:

export MAVEN_HOME=/usr/local/maven/apache-maven-3.3.1
export PATH=.:/usr/local/protoc/bin:$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH


输入后如上图所示,保存退出,刷新设置:source /etc/profile

通过命令protoc --version查看protobuf是否安装成功,如果显示libprotoc 2.4.1,则说明已安装成功。

5.编译hadoop,进入release-2.4.1目录:cd /usr/local/svn/release-2.4.1/ 然后敲入命令:mvn package -Pdist,native -DskipTests -Dtar,开始编译

接下来就是漫长的等待,编译需要较长时间,大概1个小时左右。编译成功会显示如下截图所示信息:

此时编译好的文件位于/usr/local/svn/release-2.4.1/hadoop-dist/target/hadoop-2.4.1/ 目录中
拷贝hadoop-2.4.1到之前hadoop的安装目录下(删除之前的hadoop-2.4.1文件夹),重新修改其配置文件,并格式化,启动,即可。


可以看到,现在执行hdfs dfs相关的命令已没有报错了。

如果不想那么麻烦,可以下载我已经编译好的hadoop-2.4.1,百度网盘地址:链接:http://pan.baidu.com/s/1pJr6Lrt 密码:45i7




0 0
原创粉丝点击