我目前正在一台运行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 /本地/”
什么好主意吗?
我假设您在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
我没有使用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
将user替换为用户名
这个答案混合了@chromeeagle的分析和这个链接(Nan-Xiao)。
对于那些其他解决方案根本不起作用的人,请遵循以下步骤:
Edit the file $HADOOP_HOME/etc/hadoop/log4j.properties (credits to @chromeeagle). Add the line at the end:
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG
Launch your spark/pyspark shell. You will see additional log information regarding the native library not loading. In my case I had the following error:
Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: no hadoop in java.library.path
To fix this specific problem, add the Hadoop native library path to the LD_LIBRARY_PATH environment variable in your user's profile:
export LD_LIBRARY_PATH="$HADOOP_HOME/lib/native:$LD_LIBRARY_PATH"
希望这能有所帮助。我在几个HADOOP安装中遇到了这个问题,它在两个上都有效。