hadoop“无法为您的平台加载本机hadoop库”警告

8fsztsew  于 2021-06-03  发布在  Hadoop
关注(0)|答案(21)|浏览(554)

我目前正在运行centos的服务器上配置hadoop。当我跑的时候 start-dfs.sh 或者 stop-dfs.sh ,我得到以下错误:
warn util.nativecodeloader:无法为您的平台加载本机hadoop库。。。在适用的情况下使用内置java类
我正在运行hadoop2.2.0。
在网上搜索时出现以下链接:http://balanceandbreath.blogspot.ca/2013/01/utilnativecodeloader-unable-to-load.html
但是 /native/ hadoop2.x上的目录似乎不同,所以我不知道该怎么办。
我还在中添加了这两个环境变量 hadoop-env.sh :
export hadoop\u opts=“$hadoop\u opts-djava.library.path=/usr/local/hadoop/lib/”
导出hadoop\u common\u lib\u native\u dir=“/usr/local/hadoop/lib/native/”
有什么想法吗?

mxg2im7a

mxg2im7a1#

经过科蒂建议的持续研究,这个问题得到了解决。

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 * ../

干杯

bttbmeg0

bttbmeg02#

@zhutoulala——fwiw你的链接在Hadoop2.4.0中对我有用,但有一个例外,我不得不告诉maven不要构建javadocs。我还在2.4.0的第一个链接中使用了这个补丁,它运行得很好。这是我不得不发布的maven命令

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

在构建并移动库之后,不要忘记更新hadoop-env.sh:)
我想这可能会帮助一个和我遇到同样路障的人

tgabmvqs

tgabmvqs3#

将编译的本机库文件移到 $HADOOP_HOME/lib 文件夹。
然后通过编辑设置环境变量 .bashrc 文件

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

确保编译的本机库文件在 $HADOOP_HOME/lib 文件夹。
应该有用。

sc4hvdpw

sc4hvdpw4#

对于安装hadoop来说,从cloudera安装免费版本要容易得多。它提供了一个很好的gui,使添加节点变得简单,没有编译或填充依赖项,它还提供了hive、pig等工具。
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中转到主页,单击“色调”和“色调web ui”。这使您可以访问Hive,Pig,sqoop等。

v1l68za4

v1l68za45#

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
ycggw6v2

ycggw6v26#

对于那些在osx上通过自制安装了hadoop的用户,请按照以下步骤操作,在适当的情况下替换路径和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"
kgsdhlau

kgsdhlau7#

我没有用centos。以下是我在ubuntu16.04.2、hadoop-2.7.3、jdk1.8.0\u121中的内容。成功运行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

用用户名替换用户

aamkag61

aamkag618#

我和jdk6有同样的问题,我把jdk改成了jdk8,问题解决了。尝试使用jdk8!!!

h79rfbju

h79rfbju9#

这也会起作用:

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

eyh26e7m10#

除了@zhutoulala接受的答案之外,这里还有一个更新,使它能够在armhf平台(raspberry pi 3 model b)上使用到目前为止最新的稳定版本(2.8)。首先,我可以确认您必须将本机库重新编译到64位arm,这里基于设置一些环境变量的其他答案将不起作用。如hadoop文档所示,预构建的本机库是32位的。
在第一个链接中给出了高级步骤(http://www.ercoppa.org/posts/how-to-compile-apache-hadoop-on-ubuntu-linux.html)是正确的。在此url上http://www.instructables.com/id/native-hadoop-260-build-on-pi/ 您可以获得更多特定于raspberry pi的详细信息,但hadoop版本2.8没有。
以下是我对hadoop 2.8的建议:
在最新的raspbian上仍然没有protobuf包,所以您必须自己编译它,并且版本必须是protobuf2.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)您必须将andreas muttscheller建议的修补程序复制并粘贴到您的namenode上:

: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时的警告消息应该消失。

dldeef67

dldeef6711#

答案取决于。。。我刚刚在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\u 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\u conf\u 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。唯一的解决方案是从我的操作系统上的源代码构建本机库,或者抑制警告并暂时忽略它。我选择了暂时不显示这个恼人的警告(但是计划将来从源代码构建),使用我们用来获取调试消息的相同日志选项,除了现在,只将其设置为错误级别。

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

我希望这能帮助其他人看到,开源软件的一大好处是,如果你采取一些简单的逻辑步骤,你就能弄清楚这些东西。

vs91vp4v

vs91vp4v12#

首先,你可以修改glibc版本,centos提供传统的安全软件,这也意味着glibc、protobuf、protobuf等旧版本。。。

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

您可以将当前glibc的版本与需要的glibc进行比较。
第二:如果当前glibc的版本是旧的,您可以更新glibc。下载glibc
如果当前glibc id的版本正确,您可以将word native附加到hadoop选项中

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

gzszwxb413#

这一行就在这里:

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

昆贝特的回答对我有用。只需将其附加到.bashrc文件并重新加载.bashrc内容

$ source ~/.bashrc
a2mppw5e

a2mppw5e14#

先前发布的已验证补救措施:
1) 检查一下 libhadoop.so.1.0.0 hadoop发行版附带的是针对我的机器体系结构(x86\u 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=<path>HADOOP_OPThadoop-env.sh :

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

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

kulphzqa

kulphzqa15#

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"

相关问题