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

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

问题是:

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  
  1. 我使用的是 ubuntu 16.04,我从 Apache 镜像下载了 hadoop 稳定版 2.7.2:
    http://apache.spinellicreations.com/hadoop/common/

  2. 我已经安装了 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:
  1. ~/.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

  2. 修改文件:
    /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

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

    /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

  2. 对文件的修改:/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

  1. 对文件的修改:/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

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

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

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

  1. 当我在终端输入主机名时,它显示 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

  2. 我也禁用了 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

  3. 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

  4. 重启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

  5. 现在错误来了

hdfs dfs -ls

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

  1. 检查 jps

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

  2. 检查本机

    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 退出

  3. 然后我安装了缺少的库:
    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 已经安装。

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

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

相关链接:
Result of hdfs dfs -ls command
hdfs dfs ls not working after multiple nodes configured
hadoop fs -ls does not work
Namenode not getting started
No Namenode or Datanode or Secondary NameNode to stop
Hadoop 2.6.1 Warning: WARN util.NativeCodeLoader
Hadoop 2.2.0 Setup (Pseudo-Distributed Mode): ERROR// Warn util.NativeCodeLoader: unable to load native-hadoop library
Command "hadoop fs -ls ." does not work

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

我们将不胜感激!

【问题讨论】:

    标签: hadoop hadoop-streaming


    【解决方案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 并避免这些安装类型问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    相关资源
    最近更新 更多