原创,转载请注明出处
HDFS的DATANODE的剩余空间具体要到多大?关于这个问题,下面记录下对这个问题的调查
昨天,讨论群里面给出了一个异常:
op@odbtest bin]$ hadoop fs -put ../tmp/file3 /user/hadoop/in2
14/01/15 02:14:09 WARN hdfs.DFSClient: DataStreamer Exception
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.
at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget(BlockManager.java:1384)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:2477)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:555)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:387)
at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java:59582)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:585)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:928)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2048)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2044)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2042)
该异常的只在NN的日志中抛出,而DN中没有相关内容,这说明,这是在NN进行block分配的时候做了检查。
这种情况一般都是DATANODE 变成dead,或者是datanode的磁盘容量不够了。
所以建议问题提出者,给DN的datadir空出一部分空间之后,操作正常
但是,该问题的提出者,给出report 数据:
[hadoop@odbtest bin]$ hdfs dfsadmin -report
Configured Capacity: 8210259968 (7.65 GB)
Present Capacity: 599728128 (571.95 MB)
DFS Remaining: 599703552 (571.92 MB)
DFS Used: 24576 (24 KB)
DFS Used%: 0.00%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
-------------------------------------------------
Datanodes available: 1 (1 total, 0 dead)
Live datanodes:
Name: 192.168.136.128:50010 (odbtest)
Hostname: odbtest
Decommission Status : Normal
Configured Capacity: 8210259968 (7.65 GB)
DFS Used: 24576 (24 KB)
Non DFS Used: 7610531840 (7.09 GB)
DFS Remaining: 599703552 (571.92 MB)
DFS Used%: 0.00%
DFS Remaining%: 7.30%
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的剩余容量进行判断:
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;
}
代码中说了,当剩余容量小于blockSize* HdfsConstants.MIN_BLOCKS_FOR_WRITE的时候,会返回false,而默认情况下 blockSize* HdfsConstants.MIN_BLOCKS_FOR_WRITE=128M*5=640M> 571.92 MB,这就解释了这个异常发生的原因。
分享到:
相关推荐
- 磁盘满了导致的问题很难预料,HDFS可能会导致部分数据写入异常,MySQL可能会出现直接宕机等等, 所以最好的办法就是:不要使盘的利用率达到100%。 - 数据存储周期规划好,定期清理数据。或者实现自动化清理。
随着业务增长,可能需要动态添加DataNode以扩展存储容量。以下是添加新DataNode的基本步骤: 1. 准备新节点环境,包括克隆虚拟机、更改IP地址和主机名、配置SSH无密登录,并清理原有HDFS文件系统。 2. 在NameNode...
"HDFS体系结构详解" HDFS(Hadoop Distributed File System)是一种...3. `hdfs datanode`:运行DataNode,存储和管理数据块。 HDFS体系结构是Hadoop的核心组件,提供了高效、可靠、可扩展的分布式文件系统解决方案。
在 docker 容器中运行 hdfs 数据节点 暴露端口 TCP 50010 dfs.datanode.address 数据传输端口 TCP 50020 dfs.datanode.ipc.address ipc 服务器 ...docker run -d --link namenode:namenode hauptmedia/hdfs-datanode
【HDFS篇10】DataNode相关概念1 在大数据处理领域,Hadoop Distributed File System (HDFS) 是一种分布式文件系统,广泛应用于大规模数据存储。随着企业业务的增长,原有的数据节点可能无法满足日益增长的存储需求...
用Java语言结合JSch库,实现在单台机器上远程监控多台服务器上的HDFS状态、磁盘空间,并在必要时自动删除日志文件,以释放空间。 详细教程可以看:https://aigpt.blog.csdn.net/article/details/139625439
4.2.2 Datanode磁盘存储结构 315 4.2.3 DataStorage实现 317 4.3 文件系统数据集 334 4.3.1 Datanode上数据块副本的状态 335 4.3.2 BlockPoolSlice实现 335 4.3.3 FsVolumeImpl实现 342 4.3.4 ...
1. HDFS架构:HDFS集群由一个Master(NameNode)和多个Slave(DataNode)组成。NameNode负责管理文件系统命名空间和客户端对文件系统的访问操作;DataNode管理存储的数据。 2. 文件存储:文件以块形式存储在...
False ) hdfs_namenode_host - HDFS NameNode 的主机名(默认: localhost ) hdfs_namenode_port - HDFS NameNode 的端口(默认: 8020 ) hdfs_disks - HDFS DataNode 上可用的磁盘列表(默认值: [] ) hdfs_...
《HDFS的概念——Namenode和Datanode详解》 Hadoop分布式文件系统(HDFS)是Apache Hadoop项目的核心组件,为大数据处理提供了高效、可靠的分布式存储解决方案。HDFS设计的目标是处理海量数据,其架构基于两个核心...
本文将对HDFS源码进行详细的分析和整理,涵盖了HDFS的目录结构、对象序列化、压缩、RPC机制、DataNode工作状态等多个方面。 目录结构分析 HDFS的目录结构是HDFS架构的基础,理解HDFS的目录结构是ucceeding HDFS源码...
4. HDFS的扩展性:如何增加DataNode以扩展存储容量,以及NameNode的高可用性方案。 5. HDFS的优化策略:如Block大小的选择、数据块副本数的配置、I/O性能优化等。 6. HDFS与MapReduce的协同工作:解释如何利用HDFS...
HDFS基于主从结构,主要由NameNode和DataNode组成。NameNode作为主节点,负责管理文件系统的元数据,如文件和目录的命名空间以及文件的块映射信息。DataNode是工作节点,存储实际的数据块,并定期向NameNode汇报其...
node3 : HDFS DataNode + YARN NodeManager + Spark Slave node4 : HDFS DataNode + YARN NodeManager + Spark Slave 入门 。 运行vagrant box add ubuntu/trusty64 Git 克隆这个项目,并将目录(cd)更改为这...
2. **HDFS WEB UI上的datanode节点信息监控**:展示各个DataNode节点的状态,包括节点的内存使用、磁盘空间、心跳状态等,可及时发现节点故障。 3. **HDFS WEB UI上的hadoop文件系统信息监控**:显示整体文件系统的...
分布式存储系统是一种允许文件通过网络在多台主机上共享的文件系统,它解决了由于单个存储设备的容量限制而无法存储大量数据的问题。在分布式存储系统中,数据被分散存储在不同的服务器上,这些服务器组成一个集群,...
DataNode是Hadoop分布式文件系统HDFS(Hadoop Distributed File System)的核心组件之一,负责存储和管理数据块。下面是DataNode的职责和相关知识点: 一、 DataNode的职责 DataNode的主要职责是存储和管理数据块...
HDFS设计为水平扩展,可以轻松添加更多DataNode以增加存储容量和处理能力。随着集群规模的增长,HDFS能够处理PB级别的数据。 ### 7. 高容错性 通过心跳机制和Block Report,DataNode定期向NameNode报告其状态,...