zoukankan      html  css  js  c++  java
  • HDFS DATANODE 磁盘容量的最小值

    HDFS的DATANODE的剩余空间具体要到多大?关于这个问题,下面记录下对这个问题的调查 

    昨天,讨论群里面给出了一个异常: 

    Java代码  收藏代码
    1. op@odbtest bin]$ hadoop fs -put ../tmp/file3 /user/hadoop/in2  
    2. 14/01/15 02:14:09 WARN hdfs.DFSClient: DataStreamer Exception  
    3. org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /user/hadoop/in2/file3._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1).  There are 1 datanode(s) running and no node(s) are excluded in this operation.  
    4.         at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget(BlockManager.java:1384)  
    5.         at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:2477)  
    6.         at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:555)  
    7.         at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:387)  
    8.         at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java:59582)  
    9.         at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:585)  
    10.         at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:928)  
    11.         at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2048)  
    12.         at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2044)  
    13.         at java.security.AccessController.doPrivileged(Native Method)  
    14.         at javax.security.auth.Subject.doAs(Subject.java:396)  
    15.         at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)  
    16.         at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2042)  



    该异常的只在NN的日志中抛出,而DN中没有相关内容,这说明,这是在NN进行block分配的时候做了检查。 

    这种情况一般都是DATANODE 变成dead,或者是datanode的磁盘容量不够了。 

    所以建议问题提出者,给DN的datadir空出一部分空间之后,操作正常 


    但是,该问题的提出者,给出report 数据: 

    Java代码  收藏代码
    1. [hadoop@odbtest bin]$ hdfs dfsadmin -report  
    2. Configured Capacity: 8210259968 (7.65 GB)  
    3. Present Capacity: 599728128 (571.95 MB)  
    4. DFS Remaining: 599703552 (571.92 MB)  
    5. DFS Used: 24576 (24 KB)  
    6. DFS Used%: 0.00%  
    7. Under replicated blocks: 0  
    8. Blocks with corrupt replicas: 0  
    9. Missing blocks: 0  
    10.   
    11. -------------------------------------------------  
    12. Datanodes available: 1 (1 total, 0 dead)  
    13.   
    14. Live datanodes:  
    15. Name: 192.168.136.128:50010 (odbtest)  
    16. Hostname: odbtest  
    17. Decommission Status : Normal  
    18. Configured Capacity: 8210259968 (7.65 GB)  
    19. DFS Used: 24576 (24 KB)  
    20. Non DFS Used: 7610531840 (7.09 GB)  
    21. DFS Remaining: 599703552 (571.92 MB)  
    22. DFS Used%: 0.00%  
    23. DFS Remaining%: 7.30%  
    24. Last contact: Tue Jan 14 23:47:26 PST 2014  


    按照report的数据DFS还剩下(571.92 MB)的大小,应该是可以创建的,但是抛出了这个异常,肯定是对DATANODE的剩余最小容量做了限制。查了一下HADOOP 2.2.0的源码, 
    org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyDefault的方法isGoodTarget中,会对DATANODE的剩余容量进行判断: 

    Java代码  收藏代码
    1. long remaining = node.getRemaining() -   
    2.                    (node.getBlocksScheduled() * blockSize);   
    3.   // check the remaining capacity of the target machine  
    4.   if (blockSize* HdfsConstants.MIN_BLOCKS_FOR_WRITE>remaining) {  
    5.     if(LOG.isDebugEnabled()) {  
    6.       threadLocalBuilder.get().append(node.toString()).append(": ")  
    7.         .append("Node ").append(NodeBase.getPath(node))  
    8.         .append(" is not chosen because the node does not have enough space ");  
    9.     }  
    10.     return false;  
    11.   }  


    代码中说了,当剩余容量小于blockSize* HdfsConstants.MIN_BLOCKS_FOR_WRITE的时候,会返回false,而默认情况下 blockSize* HdfsConstants.MIN_BLOCKS_FOR_WRITE=128M*5=640M> 571.92 MB,这就解释了这个异常发生的原因。

  • 相关阅读:
    static&初始化顺序
    java基础语法
    MySQL调优
    Nnginx调优
    cisco 一些基本命令
    路由器密码忘记
    利用GetPrivateProfileString读取配置文件(.ini)
    MFC中OnActivate函数解析
    在MFC应用程序中传输的消息类型
    MFC中UpdateData函数解析
  • 原文地址:https://www.cnblogs.com/sha0830/p/5060600.html
Copyright © 2011-2022 走看看