java - Hadoop“无法为您的平台加载native-hadoop库”警告

我目前正在运行CentOs的服务器上配置hadoop。 当我运行hadoop-env.sh或stop-dfs.sh时,我收到以下错误:

WARN util.NativeCodeLoader:无法加载native-hadoop库   您的平台...使用适用的builtin-java类

我正在运行Hadoop 2.2.0。

在线搜索提出了这个链接:[http://balanceandbreath.blogspot.ca/2013/01/utilnativecodeloader-unable-to-load.html]

但是,hadoop 2.x上的hadoop-env.sh目录的内容似乎有所不同,所以我不知道该怎么办。

我还在hadoop-env.sh中添加了这两个环境变量:

export HADOOP_OPTS =“$ HADOOP_OPTS  -Djava.library.path=的/ usr /本地/ hadoop的/ LIB /”

export HADOOP_COMMON_LIB_NATIVE_DIR =“/ usr / local / hadoop / lib / native /”

有任何想法吗?

20个解决方案

200 votes

我假设您在64位CentOS上运行Hadoop。 您看到该警告的原因是本机Hadoop库libhadoop.so.1.0.0实际上是在32位上编译的。

无论如何,这只是一个警告,不会影响Hadoop的功能。

如果您想要消除此警告,请下载Hadoop的源代码并在64位系统上重新编译libhadoop.so.1.0.0,然后替换32位一个。

Ubuntu包含了如何重新编译源代码的步骤:

[http://www.ercoppa.org/Linux-Compile-Hadoop-220-fix-Unable-to-load-native-hadoop-library.htm]

祝好运。

zhutoulala answered 2019-02-24T00:03:15Z

119 votes

只需在您的HADOOP_OPTS上添加原生单词,如下所示:

export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"

PS:谢谢Searene

Hoai-Thu Vuong answered 2019-02-24T00:03:48Z

44 votes

答案取决于......我刚从64位CentOS 6.6上的tarball安装了Hadoop 2.6。 Hadoop安装确实带有预构建的64位本机库。 对于我的安装,它在这里:

/opt/hadoop/lib/native/libhadoop.so.1.0.0

我知道它是64位:

[hadoop@VMWHADTEST01 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 => (0x00007fff43510000)

libdl.so.2 => /lib64/libdl.so.2 (0x00007f9be553a000)

libc.so.6 => /lib64/libc.so.6 (0x00007f9be51a5000)

/lib64/ld-linux-x86-64.so.2 (0x00007f9be5966000)

不幸的是,我愚蠢地忽略了那里的答案,正如我所关注的那样盯着我,“这个库是32位64位吗?”:

`GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)

所以,经验教训。 无论如何,其余的至少让我能够压制警告。 所以我继续并在其他答案中做了所有建议,使用HADOOP_OPTS环境变量提供库路径无济于事。 所以我查看了源代码。 生成错误的模块会告诉您提示(util.NativeCodeLoader):

15/06/18 18:59:23 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

所以,到这里看看它做了什么:

[http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.action/0.2.6/org/apache/hadoop/util/NativeCodeLoader.java/]

啊,有一些调试级别的日志记录 - 如果我们得到一些额外的帮助,让我们看看。 这是通过将以下行添加到$ HADOOP_CONF_DIR / log4j.properties文件来完成的:

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG

然后我运行了一个生成原始警告的命令,比如stop-dfs.sh,并得到了这个好东西:

15/06/18 19:05:19 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /opt/hadoop/lib/native/libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /opt/hadoop/lib/native/libhadoop.so.1.0.0)

答案在调试消息的这个片段中显示(与之前的ldd命令'试过'告诉我的相同:

`GLIBC_2.14' not found (required by opt/hadoop/lib/native/libhadoop.so.1.0.0)

我有什么版本的GLIBC? 这是一个简单的技巧:

[hadoop@VMWHADTEST01 hadoop]$ ldd --version

ldd (GNU libc) 2.12

所以,无法将我的操作系统更新到2.14。 唯一的解决方案是从我的操作系统上的源构建本机库或抑制警告,暂时忽略它。 我现在选择仅仅抑制恼人的警告(但是计划在将来从源构建)使用我们用于获取调试消息的相同日志记录选项购买,除了现在,只需将其设置为ERROR级别。

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR

我希望这有助于其他人看到开源软件的一大好处是,如果你采取一些简单的逻辑步骤,你可以解决这个问题。

chromeeagle answered 2019-02-24T00:05:30Z

21 votes

在我的情况下,在我的64位Linux薄型操作系统上构建hadoop之后,我更换了hadoop/lib中的本机库。问题仍然存在。 然后我想出了指向hadoop/lib而不是hadoop/lib/native的hadoop。所以我只是将所有内容从本地库移动到其父级。 警告刚刚消失。

koti answered 2019-02-24T00:05:56Z

20 votes

我遇到过同样的问题。 它通过在.bashrc中添加以下行来解决:

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

Neeraj answered 2019-02-24T00:06:21Z

13 votes

经过KotiI建议的持续研究后,我们解决了这个问题。

hduser@ubuntu:~$ cd /usr/local/hadoop

hduser@ubuntu:/usr/local/hadoop$ ls

bin include libexec logs README.txt share

etc lib LICENSE.txt NOTICE.txt sbin

hduser@ubuntu:/usr/local/hadoop$ cd lib

hduser@ubuntu:/usr/local/hadoop/lib$ ls

native

hduser@ubuntu:/usr/local/hadoop/lib$ cd native/

hduser@ubuntu:/usr/local/hadoop/lib/native$ ls

libhadoop.a libhadoop.so libhadooputils.a libhdfs.so

libhadooppipes.a libhadoop.so.1.0.0 libhdfs.a libhdfs.so.0.0.0

hduser@ubuntu:/usr/local/hadoop/lib/native$ sudo mv * ../

干杯

Nagarjuna D N answered 2019-02-24T00:06:48Z

10 votes

这也可行:

export LD_LIBRARY_PATH=/usr/lib/hadoop/lib/native

Kalyan Ghosh answered 2019-02-24T00:07:13Z

10 votes

对于通过Homebrew安装Hadoop的OSX上的用户,请按照以下步骤在适当的位置替换路径和Hadoop版本

wget http://www.eu.apache.org/dist/hadoop/common/hadoop-2.7.1/hadoop-2.7.1-src.tar.gz

tar xvf hadoop-2.7.1-src.tar.gz

cd hadoop-2.7.1-src

mvn package -Pdist,native -DskipTests -Dtar

mv lib /usr/local/Cellar/hadoop/2.7.1/

然后使用更新hadoop-env.sh

export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.security.krb5.realm= -Djava.security.krb5.kdc= -Djava.library.path=/usr/local/Cellar/hadoop/2.7.1/lib/native"

Philip O'Brien answered 2019-02-24T00:07:45Z

8 votes

@zhutoulala - FWIW您的链接为我使用Hadoop 2.4.0,但有一个例外我不得不告诉maven不要构建javadoc。 我也在2.4.0的第一个链接中使用了补丁,它工作正常。 这是我必须发出的maven命令

mvn package -Dmaven.javadoc.skip=true -Pdist,native -DskipTests -Dtar

在构建并移动库之后,不要忘记更新hadoop-env.sh :)

认为这可能会帮助遇到与我一样的障碍的人

user2229544 answered 2019-02-24T00:08:25Z

7 votes

export JAVA_HOME=/home/hadoop/software/java/jdk1.7.0_80

export HADOOP_HOME=/usr/local/hadoop

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export HADOOP_OPTS="-Djava.library.path=$HADOOP_COMMON_LIB_NATIVE_DIR"

li li answered 2019-02-24T00:08:43Z

5 votes

将已编译的本机库文件移动到$HADOOP_HOME/lib文件夹。

然后通过编辑$HADOOP_HOME/lib文件来设置环境变量

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib

export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib"

确保已编译的本机库文件位于$HADOOP_HOME/lib文件夹中。

它应该工作。

Vijayakumar answered 2019-02-24T00:09:29Z

1 votes

export HADOOP_HOME=/home/hadoop/hadoop-2.4.1

export PATH=$HADOOP_HOME/bin:$PATH

export HADOOP_PREFIX=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_PREFIX

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_PREFIX/lib/native

export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop

export HADOOP_HDFS_HOME=$HADOOP_PREFIX

export HADOOP_MAPRED_HOME=$HADOOP_PREFIX

export HADOOP_YARN_HOME=$HADOOP_PREFIX

export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH

KunBetter answered 2019-02-24T00:09:48Z

1 votes

这一行就在这里:

export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH

从KunBetter的回答是钱的来源

Tom Kelly answered 2019-02-24T00:10:23Z

1 votes

这一行就在这里:

export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH

来自KunBetter的回答,为我工作。只需将其附加到.bashrc文件并重新加载.bashrc内容即可

$ source ~/.bashrc

BeingSachin answered 2019-02-24T00:10:53Z

1 votes

我和JDK6有同样的问题,我将JDK改为JDK8,问题解决了。尝试使用JDK8 !!!

MangoJo answered 2019-02-24T00:11:19Z

1 votes

除了@zhutoulala接受的答案,这里有一个更新,使其与ARMHF平台(Raspberry Pi 3模型B)上最新的稳定版本(2.8)一起使用。首先我可以确认你必须将本机库重新编译为64位ARM,其他答案在这里基于设置一些环境变量是行不通的。 如Hadoop文档中所示,预构建的本机库是32位。

第一个链接([http://www.ercoppa.org/posts/how-to-compile-apache-hadoop-on-ubuntu-linux.html)]中给出的高级步骤是正确的。在这个网址[http://www.instructables.com/id/Native-Hadoop-260-Build-on-Pi/]上,您可以获得特定于Raspberry Pi的更多详细信息,但不会获得Hadoop 2.8版本的详细信息。

以下是我的注意事项:Hadoop 2.8:

最新的Raspbian上仍然没有protobuf包,所以你必须自己编译,版本必须完全是protobuf 2.5([https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz]]

必须更改CMake文件修补方法。 更多的东西,文件到补丁是不一样的。 遗憾的是,JIRA上没有特定于2.8的补丁。 在此URL([https://issues.apache.org/jira/browse/HADOOP-9320]]上,您必须在您的namenode上复制并粘贴Andreas Muttscheller建议的补丁:

:hadoop-2.8.0-src/hadoop-common-project/hadoop-common $ touch HADOOP-9320-v2.8.patch

:hadoop-2.8.0-src/hadoop-common-project/hadoop-common $ vim HADOOP-9320-v2.8.patch

#copy and paste proposed patch given here : https://issues.apache.org/jira/browse/HADOOP-9320?focusedCommentId=16018862&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-16018862

:hadoop-2.8.0-src/hadoop-common-project/hadoop-common $ patch < HADOOP-9320-v2.8.patch

patching file HadoopCommon.cmake

patching file HadoopJNI.cmake

:hadoop-2.8.0-src/hadoop-common-project/hadoop-common $ cd ../..

:hadoop-2.8.0-src $ sudo mvn package -Pdist,native -DskipTests -Dtar

一旦构建成功:

:hadoop-2.8.0-src/hadoop-dist/target/hadoop-2.8.0/lib/native $ tar -cvf nativelibs.tar *

并使用此存档的内容替换Hadoop安装的lib / native目录的内容。 运行Hadoop时的警告消息应该消失。

mattt answered 2019-02-24T00:12:35Z

0 votes

对于安装Hadoop,安装Cloudera的免费版本要容易得多。 它带有一个漂亮的GUI,可以很容易地添加节点,没有编译或填充依赖项,它带有像蜂巢,猪等的东西。

[http://www.cloudera.com/content/support/en/downloads.html]

步骤是:1)下载2)运行它3)转到Web GUI(1.2.3.4:7180)4)在web gui中添加额外的节点(不要在其他节点上安装cloudera软件,它会为你完成所有操作)5)在Web GUI中,转到Home,单击Hue和Hue Web UI。 这使您可以访问Hive,Pig,Sqoop等。

MikeKulls answered 2019-02-24T00:13:16Z

0 votes

早期帖子验证的补救措施:

1)检查Hadoop发行版附带的-Djava.library.path=是否为我的机器架构编译,即x86_64:

[nova]:file /opt/hadoop-2.6.0/lib/native/libhadoop.so.1.0.0

/opt/hadoop-2.6.0/lib/native/libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=3a80422c78d708c9a1666c1a8edd23676ed77dbb, not stripped

2)已添加-Djava.library.path=至HADOOP_OPT,电子邮件:hadoop-env.sh:

export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.library.path=/opt/hadoop-2.6.0/lib/native"

这确实使恼人的警告消失了。

piiteraq answered 2019-02-24T00:14:02Z

0 votes

首先:你可以修改glibc版本.CentOS提供传统的安全软件,它也意味着版本很旧,如glibc,protobuf ......

ldd --version

ldd /opt/hadoop/lib/native/libhadoop.so.1.0.0

您可以将当前glibc的版本与所需的glibc进行比较。

其次:如果当前glibc的版本是旧的,你可以更新glibc。DownLoad Glibc

如果当前glibc id的版本正确,您可以将单词native替换为HADOOP_OPTS

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

Qidong Wang answered 2019-02-24T00:14:48Z

0 votes

我没有使用CentOS。 这是我在Ubuntu 16.04.2中所拥有的,hadoop-2.7.3,jdk1.8.0_121。 成功运行start-dfs.sh或stop-dfs.sh没有错误:

# JAVA env

#

export JAVA_HOME=/j01/sys/jdk

export JRE_HOME=/j01/sys/jdk/jre

export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:${PATH}:.

# HADOOP env

#

export HADOOP_HOME=/j01/srv/hadoop

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME

export YARN_HOME=$HADOOP_HOME

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

将/ j01 / sys / jdk,/ j01 / srv / hadoop替换为您的安装路径

我还在Ubuntu上进行了一次设置以下操作,这样就无需在运行start-dfs.sh时多次输入密码:

sudo apt install openssh-server openssh-client

ssh-keygen -t rsa

ssh-copy-id user@localhost

用您的用户名替换用户

Jonathan L answered 2019-02-24T00:15:35Z

java.library.path hadoop_java - Hadoop“无法为您的平台加载native-hadoop库”警告相关推荐

  1. java.library.path hadoop_关于java:Hadoop“无法为您的平台加载本机Hadoop库”警告

    我目前正在运行CentO的服务器上配置hadoop. 当我运行start-dfs.sh或stop-dfs.sh时,出现以下错误: WARN util.NativeCodeLoader: Unable ...

  2. java.lang.UnsatisfiedLinkError:no jhdf5 in java.library.path问题的解决

    笔者在MyEclipse中进行HDF文件的读写,遇到了java.lang.UnsatisfiedLinkError:no jhdf5 in java.library.path的问题.笔者详细地记录了整 ...

  3. IDEA springboot启动报错java.lang.UnsatisfiedLinkError: no tcnative-1 in java.library.path

    IDEA springboot启动报错: java.lang.UnsatisfiedLinkError: no tcnative-1 in java.library.path: [D:\Java\bi ...

  4. java出现no XXX in java.library.path的解决办法及eclipse配置

    java出现no XXX in java.library.path的解决办法及eclipse配置 java一般使用两个path:classpath 和 java.library.path classp ...

  5. JAVA web项目报错no sigar-x86-winnt.dll in java.library.path

    最近,在调试一JAVA web项目时,后台报错:no sigar-x86-winnt.dll in java.library.path:提示很明显:就是JAVA运行库缺少sigar-x86-winnt ...

  6. java.library.path属性在代码中设置不生效问题

    http://www.blogjava.net/gembin/archive/2008/10/29/237377.html from http://daimojingdeyu.blogbus.com/ ...

  7. no nlsxbe in java.library.path

    关于这个no nlsxbe in java.library.path 在系统环境变量中指定的Path下面添加进notes路径如c:\notes这样它就会自动查找了 转载于:https://blog.5 ...

  8. java.library.path到底指什么

    java.library.path到底指什么? 这个就是.bashrc中的LD_LIBRARY_PATH 设为 export LD_LIBRARY_PATH=$HADOOP_HOME/lib/nati ...

  9. 在java.library.path中找不到允许在生产环境中实现最佳性能的基于APR的Apache Tom.....

    在java.library.path中找不到允许在生产环境中实现最佳性能的基于APR的Apache Tom- 2021-6-2 19:55:17 org.apache.catalina.core.Ap ...

最新文章

  1. zoj 2972 Hurdles of 110m (DP)
  2. Mac下firefox ssl_error_ssl_disabled
  3. 高手是如何定位内存问题的代码位置的
  4. Code Sinppet
  5. python中两个集合的运算并交补_三种方式实现 Python 中的集合的交、并、补运算...
  6. app 缓存html页面,HTML5本地存储VS App缓存离线网站浏览
  7. android画板过程分析,Android涂鸦画板原理详解——从初级到高级(二)
  8. 颠覆者-读周鸿祎新书
  9. 微信小程序之 获取input框输入值
  10. 项目经理与产品经理的区别
  11. 网络存储文件共享之WebDAV
  12. 【软件测试】Fiddler拦截+京东登陆练习
  13. GetAsyncKeyState()用法
  14. nand falsh 111
  15. MacOS QQ红包助手 (消息防撤回、自动抢红包)
  16. 松翰2.4G无线传输USB摄像头方案
  17. 计算机基本存储单位及其关系
  18. Genesis10.0 安装教程
  19. CI24R1小模块(内置天线)2.4G无线收发芯片
  20. 使用 amMap 轻松添加互动效果的 JavaScript 地图

热门文章

  1. php里面的log是什么文件夹,用PHP生成自己的LOG文件
  2. linux网站目录大小写,Linux服务器url区分大小写如何解决
  3. angular元素属性绑定_AngularJS语法基础及数据绑定——详解各种数据绑定指令、属性应用...
  4. intellij idea不显示git push按钮的解决办法
  5. SpringCloud中Feign服务调用请求方式及参数总结
  6. PHP中使用redis执行lua脚本示例
  7. gis根据行政区计算栅格数据计算_Java中根据半径计算圆的周长和面积
  8. proc除了能用于oracle开发_能不能用于mysql开发_Oracle数据库开发(二).Linux下配置使用ProC...
  9. TP3.2的删除缓存与引入第三方库的问题(二)
  10. Java可以跨平台的原因