Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hadoop“;无法为您的平台加载本机hadoop库;警告_Java_Linux_Hadoop_Hadoop2_Java.library.path - Fatal编程技术网

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

Java Hadoop“;无法为您的平台加载本机hadoop库;警告,java,linux,hadoop,hadoop2,java.library.path,Java,Linux,Hadoop,Hadoop2,Java.library.path,我目前正在运行CentOs的服务器上配置hadoop。运行start dfs.sh或stop dfs.sh时,出现以下错误: WARN util.NativeCodeLoader:无法加载的本机hadoop库 你的平台。。。在适用的情况下使用内置java类 我正在运行Hadoop 2.2.0 联机搜索时会出现以下链接: 但是,hadoop 2.x上的/native/目录的内容似乎有所不同,因此我不确定该怎么办 我还在hadoop env.sh中添加了这两个环境变量: export HADOOP_

我目前正在运行CentOs的服务器上配置hadoop。运行
start dfs.sh
stop dfs.sh
时,出现以下错误:

WARN util.NativeCodeLoader:无法加载的本机hadoop库 你的平台。。。在适用的情况下使用内置java类

我正在运行Hadoop 2.2.0

联机搜索时会出现以下链接:

但是,hadoop 2.x上的
/native/
目录的内容似乎有所不同,因此我不确定该怎么办

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

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

export HADOOP_COMMON_LIB_NATIVE_DIR=“/usr/local/HADOOP/LIB/NATIVE/”


有什么想法吗?

我想你正在64位CentOS上运行Hadoop。您看到该警告的原因是原生Hadoop库
$Hadoop\u HOME/lib/native/libhadoop。因此.1.0.0
实际上是在32位上编译的

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

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

关于如何重新编译Ubuntu源代码的步骤包括:


祝你好运。

要安装Hadoop,从Cloudera安装免费版本要容易得多。它附带了一个漂亮的GUI,使添加节点变得简单,没有编译或填充依赖项,它附带了诸如hive、pig等内容

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

@zhutoulala--FWIW您的链接在Hadoop 2.4.0中对我有效,但有一个例外,我不得不告诉maven不要构建javadocs。我还在2.4.0的第一个链接中使用了补丁,它运行良好。这是我必须发出的maven命令

mvn package -Dmaven.javadoc.skip=true -Pdist,native -DskipTests -Dtar
构建并移动库之后,不要忘记更新hadoop-env.sh:)


我想这可能会帮助那些遇到与我相同障碍的人。在我的例子中,在我在64位Linux mint操作系统上构建hadoop之后,我替换了hadoop/lib中的本机库。但问题依然存在。然后我发现hadoop指向
hadoop/lib
而不是
hadoop/lib/native
。所以我只是将所有内容从本机库移动到其父库。警告刚刚消失。

我也有同样的问题。通过在
.bashrc
中添加以下行可以解决此问题:

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
只需将单词native添加到您的
HADOOP\u选项中,如下所示:

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

PS:Thank

将编译的本机库文件移动到
$HADOOP\u HOME/lib
文件夹中

然后通过编辑
.bashrc
文件来设置环境变量

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib  
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib"
确保编译的本机库文件位于
$HADOOP\u HOME/lib
文件夹中

它应该可以工作。

这也可以工作:

export LD_LIBRARY_PATH=/usr/lib/hadoop/lib/native
这一行就在这里:

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

昆贝特的答案是钱在哪里

答案取决于。。。我刚刚在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位的?”时,我愚蠢地忽略了答案:

因此,我们吸取了教训。不管怎么说,剩下的至少让我能够抑制这个警告。因此,我继续并做了其他答案中推荐的所有事情,使用HADOOP_OPTS环境变量提供库路径,但没有效果。所以我看了源代码。生成错误的模块会告诉您提示(util.NativeCodeLoader):

所以,到这里来看看它的功能:

啊,这里有一些调试级别的日志记录-让我们打开它,看看是否能得到一些额外的帮助。通过将以下行添加到$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。唯一的解决方案是从我的操作系统上的源代码构建本机库,或者抑制警告并暂时忽略它。我选择暂时抑制恼人的警告(但将来确实计划从源代码构建)使用我们用来获取调试消息的相同日志选项购买,除了现在,只需将其设置为错误级别

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

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

验证了先前帖子中的补救措施:

1) 检查Hadoop发行版附带的
libhadoop.so.1.0.0
是否针对我的机器体系结构(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\u OPT
中的
HADOOP env.sh

export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.library.path=/opt/hadoop-2.6.0/lib/native"
这确实让恼人的警告消失了。

这行就在这里:

export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
从昆贝特的回答来看,这对我有效。 只需将其附加到.bashrc文件并重新加载.bashrc内容

$ source ~/.bashrc

对于那些在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"

首先:您可以修改glibc版本,CentOS传统上提供安全软件,这也意味着该版本很旧
ldd --version
ldd /opt/hadoop/lib/native/libhadoop.so.1.0.0
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
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 * ../
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"
# 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
sudo apt install openssh-server openssh-client
ssh-keygen -t rsa
ssh-copy-id user@localhost
: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 *
export HADOOP_OPTS = "$HADOOP_OPTS"-Djava.library.path = /usr/local/hadoop/lib export HADOOP_COMMON_LIB_NATIVE_DIR = "/usr/local/hadoop/lib/native"