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

警告跑龙套。NativeCodeLoader:无法加载原生hadoop库 你的平台……在适用的地方使用内置java类

我运行的是Hadoop 2.2.0。

我在网上搜索了一下,找到了这个链接:http://balanceandbreath.blogspot.ca/2013/01/utilnativecodeloader-unable-to-load.html

但是,hadoop 2上的/native/目录的内容。x似乎不同,所以我不知道该怎么办。

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

出口HADOOP_OPTS = " HADOOP_OPTS美元 -Djava.library.path = / usr /地方/ hadoop / lib /” 出口HADOOP_COMMON_LIB_NATIVE_DIR = " / usr /地方/ hadoop / lib /本地/”

什么好主意吗?


当前回答

我用JDK6也有同样的问题,我把JDK换成了JDK8,问题解决了。 尝试使用JDK8!!

其他回答

我假设您在64位CentOS上运行Hadoop。你看到这个警告的原因是原生Hadoop库$HADOOP_HOME/lib/native/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

基本上,这不是一个错误,而是Hadoop集群中的一个警告。 这里我们只是更新环境变量。

export HADOOP_OPTS = "$HADOOP_OPTS"-Djava.library.path = /usr/local/hadoop/lib
 export HADOOP_COMMON_LIB_NATIVE_DIR = "/usr/local/hadoop/lib/native"

从以前的帖子验证补救措施:

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=<path hadoop-env.sh中的> to HADOOP_OPT:

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

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

要安装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中进入Home,单击Hue和Hue web UI。这让你可以访问Hive, Pig, Sqoop等。

只需要像这样追加word native到你的HADOOP_OPTS:

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

PS:谢谢Searene