hadoop 错误:util.NativeCodeLoader(hdfs dfs -ls 不起作用!)

Posted

技术标签:

【中文标题】hadoop 错误:util.NativeCodeLoader(hdfs dfs -ls 不起作用!)【英文标题】:hadoop error: util.NativeCodeLoader (hdfs dfs -ls does not work!) 【发布时间】:2016-09-27 15:09:37 【问题描述】:

我看到很多人在安装 hadoop 时遇到问题。我浏览了所有相关的 *** 问题,但无法解决问题。

问题是:

hdfs dfs -ls 
16/09/27 09:43:42 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
ls: `.': No such file or directory  

    我使用的是 ubuntu 16.04,我从 Apache 镜像下载了 hadoop 稳定版 2.7.2:http://apache.spinellicreations.com/hadoop/common/

    我已经安装了 java 和 ssh。

    哪个java java 是 /usr/bin/java 哪个javac javac 是 /usr/bin/javac 哪个 ssh ssh 是 /usr/bin/ssh 回声 $JAVA_HOME /usr/lib/jvm/java-9-openjdk-amd64

注意:

sudo update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-9-openjdk-amd64/bin/java       1091      auto mode
  1            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode
  2            /usr/lib/jvm/java-9-openjdk-amd64/bin/java       1091      manual mode

Press <enter> to keep the current choice[*], or type selection number:

    ~/.bashrc 中的hadoop环境变量

    导出 JAVA_HOME=/usr/lib/jvm/java-9-openjdk-amd64 导出 HADOOP_INSTALL=/home/bhishan/hadoop-2.7.2 导出 PATH=$PATH:$HADOOP_INSTALL/bin 导出 PATH=$PATH:$HADOOP_INSTALL/sbin 导出 HADOOP_MAPRED_HOME=$HADOOP_INSTALL 导出 HADOOP_COMMON_HOME=$HADOOP_INSTALL 导出 HADOOP_HDFS_HOME=$HADOOP_INSTALL 导出 YARN_HOME=$HADOOP_INSTALL 导出 HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native 导出 HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib" 导出 PATH=$PATH:$HADOOP_HOME/bin

    修改文件:/home/bhishan/hadoop-2.7.2/etc/hadoop/hadoop-env.sh

最后加了一行:

export JAVA_HOME=/usr/lib/jvm/java-9-openjdk-amd64

pastebin中hadoop-env.sh的链接在这里:http://pastebin.com/a3iPjB04

    然后我创建了一些空目录:

    /home/bhishan/hadoop-2.7.2/tmp /home/bhishan/hadoop-2.7.2/etc/hadoop/hadoop_store /home/bhishan/hadoop-2.7.2/etc/hadoop/hadoop_store/hdfs /home/bhishan/hadoop-2.7.2etc/hadoop/hadoop_store/hdfs/datanode /home/bhishan/hadoop-2.7.2/etc/hadoop/hadoop_store/hdfs/namenode

    对文件的修改:/home/bhishan/hadoop-2.7.2/etc/hadoop/hdfs-site.xml

<property>  
  <name>dfs.replication</name>  
  <value>1</value>  
  <description>Default block replication.  
  The actual number of replications can be specified when the file is created.  
  The default is used if replication is not specified in create time.  
  </description>  
 </property>  
 <property>  
   <name>dfs.namenode.name.dir</name>  
  <value>file:/home/bhishan/hadoop-2.7.2/etc/hadoop/hadoop_store/hdfs/namenode</value>

 </property>  
 <property>  
   <name>dfs.datanode.data.dir</name>  
   <value>file:/home/bhishan/hadoop-2.7.2/etc/hadoop/hadoop_store/hdfs/datanode</value>

 </property>

pastebin中的链接是这样的:http://pastebin.com/cha7ZBr8

    对文件的修改:/home/bhishan/hadoop-2.7.2/etc/hadoop/core-site.xml

正在关注:

hadoop.tmp.dir /home/bhishan/hadoop-2.7.2/tmp 一个基地 对于其他临时目录。

fs.default.name hdfs://localhost:54310 的名称 默认文件系统。一个 URI,其方案和权限决定了 文件系统实现。 uri 的方案决定了配置 命名文件系统实现的属性 (fs.SCHEME.impl) 班级。 uri的权限用于确定主机、端口、 等文件系统。

core-site.xml 的 pastebin 链接如下: http://pastebin.com/D184DuGB

    对文件的修改如下:/home/bhishan/hadoop-2.7.2/etc/hadoop/mapred-site.xml

mapred.job.tracker localhost:54311 的主机和端口 MapReduce 作业跟踪器运行在。如果是“本地”,则运行作业 在进程中作为单个 map 和 reduce 任务。

pastebin链接是:http://pastebin.com/nVxs8nMm

    当我在终端输入主机名时,它显示 BP

    猫 /etc/hosts 127.0.0.1 本地主机 BP 127.0.1.1 本地主机

    以下行适用于支持 IPv6 的主机

    ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-所有节点 ff02::2 ip6-allrouters

    我也禁用了 ipv6

    cat /etc/sysctl.conf net.ipv6.conf.all.disable_ipv6=1 net.ipv6.conf.default.disable_ipv6=1 net.ipv6.conf.lo.disable_ipv6=1

    hadoop 描述

    hadoop 版本 Hadoop 2.7.2

    哪个hadoop hadoop 是 /home/bhishan/hadoop-2.7.2/bin/hadoop

    哪个hdfs hdfs是/home/bhishan/hadoop-2.7.2/bin/hdfs

    重启hadoop

    cd /home/bhishan/hadoop-2.7.2/sbin 停止-dfs.sh stop-yarn.sh

    cd /home/bhishan/hadoop-2.7.2/tmp && rm -Rf * hadoop namenode - 格式

    开始-dfs.sh start-yarn.sh

    现在错误来了

hdfs dfs -ls

16/09/26 23:53:14 警告 util.NativeCodeLoader:无法加载 适用于您平台的 native-hadoop 库...使用内置 java 类 如果适用 ls: `.': 没有这样的文件或目录

    检查 jps

    jps 6688 sun.tools.jps.Jps 3909 次要名称节点 3525 名称节点 4327 节点管理器 4184 资源管理器 3662 数据节点

    检查本机

    hadoop checknative -a 16/09/27 09:28:18 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... 在适用的情况下使用内置 java 类 本机库检查: hadoop: 假 zlib: 假 活泼:假 lz4:假 bzip2: 假 openssl:假 16/09/27 09:28:18 INFO util.ExitUtil:以状态 1 退出

    然后我安装了缺少的库: a) 哪个 hadoop 给了 Hadoop 2.7.2

b) sudo apt-get install --reinstall zlibc zlib1g zlib1g-dev 从突触管理器中,我可以看到安装了以下库: zlib1g, zlib1g-dev , zlib1g:i386, zlibc

c) 安装 snappy 和 python-snappy。

d) 在突触管理器中,我可以看到 lz4 liblz4-1、liblz4-tool、python-lz4、python3-lz4

e) bzip2 已经安装。

f) openssl 已经安装。

    所有 checknative 都是假的,我无法运行 hdfs dfs -ls 到目前为止,我找不到任何错误。任何帮助将不胜感激。

另外,我正在尝试在具有四核的单台笔记本电脑中运行 hadoop。版本是2.7.2,版本3.0怎么样,如果我必须从头开始重新安装hadoop,可能我应该用hadoop3。欢迎提出建议。

相关链接:Result of hdfs dfs -ls commandhdfs dfs ls not working after multiple nodes configuredhadoop fs -ls does not workNamenode not getting startedNo Namenode or Datanode or Secondary NameNode to stopHadoop 2.6.1 Warning: WARN util.NativeCodeLoaderHadoop 2.2.0 Setup (Pseudo-Distributed Mode): ERROR// Warn util.NativeCodeLoader: unable to load native-hadoop libraryCommand "hadoop fs -ls ." does not work

还有,hadoop fs -mkdir failed on connection exceptionHadoop cluster setup - java.net.ConnectException: Connection refusedHadoop (local and host destination do not match) after installing hive

我们将不胜感激!

【问题讨论】:

【参考方案1】:

从此错误:

hdfs dfs -ls 
16/09/27 09:43:42 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
ls: `.': No such file or directory  

忽略有关本机库的警告 - 即使有该警告,该命令也应该可以正常工作。

当你运行 hdfs dfs -ls 时没有路径,它会尝试列出你在 HDFS 中的主目录的内容,默认情况下是 /user/。在这种情况下,我怀疑这个问题只是您的用户目录不存在。

如果你运行它是否可以正常工作:

hadoop fs -ls /

然后做:

hadoop fs -mkdir -p /user/<your_user_name>
hadoop fs -ls

【讨论】:

如果你运行“hdfs dfs -mkdir /user”,会报错还是工作? 哦等等!,现在我又重新启动了 hadoop,现在 hadoop fs -ls / WORKS! 但是:hadoop fs -mkdir -p /user/bhishan 失败! sudo mkdir -p /user/bhishan 工作。 再次:hadoop fs -mkdir -p /user/bhishan/junk_sep27 失败! “hdfs dfs mkdir -p /user/bhishan”给出了什么错误?如果您只想玩 Hadoop,最简单的方法是从 Cloudera.com 下载一个快速启动 VM - 它是所有设置和工作,让您专注于学习 Hadoop 并避免这些安装类型问题。

以上是关于hadoop 错误:util.NativeCodeLoader(hdfs dfs -ls 不起作用!)的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop:错误 BlockSender.sendChunks() 异常

Hadoop 大数据错误收集

hadoop中的JAVA路径错误

hadoop中某些数据节点的IP映射错误

hadoop在往HDFS中写数据的时候报错,错误信息如下,请大神指导

hadoop无法启动