zoukankan      html  css  js  c++  java
  • hadoop配置及无法移动文件到hdfs故障解析

    首先博主用的64位ubuntu,hadoop官方只提供32位版本,这样的话启动本地库无法兼容,需要自己编译为64位版本,或下载别人编译好的64位版本。

    下载好需要在etc/hadoop目录下改动以下几个配置

    其中hadoop-env.sh中需要指定JAVA_HOME

    export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_75

    core-site.xml配置

    <configuration>
    <property>
    <name>fs.default.name</name>
    <value>hdfs://xiao:9000/</value>
    </property>
    <property>
    <name>hadoop.native.lib</name>
    <value>true</value>
    <description>Should native hadoop libraries, if present, be used.</description>
    </property>
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/xiao/download/hadoop-2.4.0/tmp/</value>
    </property>
    </configuration>

    hdfs-site.xml配置

    <configuration>
    <property>
    <name>dfs.replication</name>
    <value>1</value>
    </property>
    </configuration>

    mapred-site.xml配置

    <configuration>
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    </configuration>

    yarn-site.xml配置

    <configuration>
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>xiao</value>
    </property>
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    <property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    </configuration>

    配置好后启动需要关闭防火墙以及安装好ssh

    sudo apt-get update

    sudo apt-get install openssh-server

    然后格式化namenode

    hadoop namenode -format

    然后切换到sbin目录下启动

    start-dfs.sh

    start-yarn.sh

    查看目录下文件

    hadoop fs -ls hdfs://xiao:9000/

    拷贝本地文件到hdfs下

    hadoop fs -put a.txt hdfs://xiao:9000/

    这一步楼主遇到一个故障

    尝试了网上各种办法无效。

    看了下logs里面的日志其中datanode日志无错误,namenode日志报上述错误,可见跟datanode无关,用命令查看datanode状态

    按照report的数据DFS还剩下(541.63 MB)的大小,应该是可以创建的,但是抛出了这个异常,肯定是对DATANODE的剩余最小容量做了限制。

    查了一下HADOOP 2.2.0的源码,org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyDefault的方法isGoodTarget中,会对DATANODE的剩余容量进行判断:

    long remaining = node.getRemaining() - 
                         (node.getBlocksScheduled() * blockSize); 
        // check the remaining capacity of the target machine
        if (blockSize* HdfsConstants.MIN_BLOCKS_FOR_WRITE>remaining) {
          if(LOG.isDebugEnabled()) {
            threadLocalBuilder.get().append(node.toString()).append(": ")
              .append("Node ").append(NodeBase.getPath(node))
              .append(" is not chosen because the node does not have enough space ");
          }
          return false;
        }

    然后博主清空了下目录里面的文件,剩余大小为900多M,再执行下命令,成功。

  • 相关阅读:
    声明了变量并赋了初始值,但在VS中报当前上下文中不存在名称“ XXX”的错误 Kevin
    delphi中的nil值 Kevin
    MVC3 + Ajax 图片上传总结 Kevin
    EntityFramework 更新数据库的问题 Kevin
    MVC3 EntityFramework 插入Mysql数据库 乱码问题 Kevin
    MVC Html 编码问题 Kevin
    周鸿祎:共享软件无合理商业模式才变流氓
    C++界面库 Xtreme Toolkit Pro[转载]
    《创业10个小诀窍》
    软件商业模式分析之-迅雷
  • 原文地址:https://www.cnblogs.com/tuifeideyouran/p/4821114.html
Copyright © 2011-2022 走看看