一 Block、Replica、BlocksMap

HDFS使用Block类抽象NameNode中的数据块,Block实现了Writable接口,是可以序列化的,并且实现了Comparable接口,可以按照blockid大小排序。

定义了三个字段:

blockId:唯一标识符

numBytes:数据块大小

generationStamp:这个数据块的时间戳

BlockInfo类扩展自Block,是Block的补充说明,定义了该数据块属于哪一个HDFS文件,定义了triplets保存这个Block副本存储在哪些数据节点上。

BlocksMap: 管理着NameNode上数据块的元数据,包括当前数据块属于哪一个HDFS文件,以及当前数据块保存在哪些DataNode上。

当DataNode启动时,会对DataNode的本地磁盘进行扫描,并将当前DataNode上保存的数据块信息汇报到NameNode.NameNode收到DataNode的汇报,会建立数据块与保存这个数据块的DataNode的对应关系,并将这个信息保存到BlocksMap中。

通过GSet对象维护着Block->BlockInfo的映射关系,GSet是hadoop自己实现的一个比较的特殊的集合类型,特殊点在于他是一个集合,但是却提供了类似映射的功能。

Replica:我们将NameNode的数据块信息叫做数据块,将DataNode上的数据块叫做副本。

Replica的状态:

FINALIZED:DataNode上的副本已完成操作,不再修改。使用FinalizedReplica描述

RBW:刚刚被创建或者追加写的副本,正在被写入,且已经写入的副本的内容还是可读的,使用ReplicaBeingWritten描述

RUR:租约过期之后发生租约恢复和数据块恢复时副本所处的状态。RUR状态的副本使用ReplicaUnderRecovery类描述。

RWR:如果一个DataNode挂掉并重启后,所有RBW状态的副本都将转换RWR状态。RWR状态的副本不会出现在数据流管道中。

TEMPORARY:DataNode之间传输副本时,正在传输的副本就是临时状态。

Block类状态

NameNode中数据块有四种状态:

COMPLETE:数据块的长度和时间戳不再变化,并且NameNode至少收到一个DataNode报告有FINALIZED状态的副本

UNDER_CONSTRUCTION:文件被创建或者进行追加写操作的时候,正在被写入的数据块就处于正在构建状态,长度和时间戳都是可变的

UNDER_RECOVERY:如果一个文件的最后一个

COMMITED:客户端在写文件时的时候,每次请求新的数据块,或者关闭文件时候,都会顺带对上一个数据块进行提交。上一个数据块

UNDER_CONSTRUCTION转化成COMMITED状态

二 数据块副本状态

BlockManager管理和维护着所有与数据块相关的操作,会将不同状态的数据块副本放到不同的数据块副本集合。

损坏的数据块副本集合:CorruptReplicaMap

客户端发现损坏的数据块时,会通过ClientProtocal.reportBadBlocks向NameNode汇报损坏的数据块副本;客户端会通过DataNodeProtocal.

reportBadBlocks方法汇报损坏的数据块副本。之后BlockManager会将损坏的副本加入到CorruptReplicaMap,保存了损坏的数据块副本与保存这个副本的DataNode的对应关系(Block->DataNode)

等待删除的数据块副本集合:InvalidateBlocks

InvalidateBlocks的数据块副本来自于损坏的数据块副本和多余的数据块副本这两个集合。BlockManager的ReplicationMonitor线程会定期执行删除操作,每一次删除的时候,ReplicationMonitor线程都会从

InvalidateBlocks中选出nodeToProcess个DataNode进行删除操作,然后再从每一个DataNode上选出dfs.block.invalidate.limit个副本删除,默认1000.

推迟操作的数据块副本集合:postponedMisreplicatedBlocks

多于的数据块副本集合:excessReplicaMap

等待复制的数据块副本集合:neededReplications

NameNode之数据块管理相关推荐

  1. Hdfs NameNode中数据块管理与数据节点管理分析

    数据块管理 在上一节介绍了BlockManager中的数据块副本状态,主要是保存各个数据块副本状态的存储对象.名字节点第二关系的管理包括数据块管理和数据节点管理,其对数据块的管理是依托于BlockMa ...

  2. Hdfs NameNode中数据块、数据节点及副本状态概述

    HDFS集群以Master-Slave模式运行,主要有两类节点:一个Namenode(即Master)和多个Datanode(即Slave). ​ 在hdfs文件系统中,NameNode是HDFS中的 ...

  3. oracle块空间的使用,Oracle管理存储架构(二)--Oracle管理数据块空间

    1.数据块的概念 数据块是数据库中最小的分配单元,块是数据库使用的最小的I/O单元,由一个或多个操作系统block组成. 数据块由block header .free space .data 组成,o ...

  4. F2FS数据块寻址(linux5.18.11)

    一.node block与data block node block:存储元数据(比如ino.寻址数据块用到的一些信息等等)的block.node block有三种类型:inode block.dir ...

  5. hdfs haadmin使用,DataNode动态上下线,NameNode状态切换管理,数据块的balance,HA下hdfs-api变化(来自学习资料)

    1.2.4集群运维测试 HA集群中两个namenode状态的管理命令 [root@mini2 hadoop-2.6.4]# bin/hdfs haadmin Usage: DFSHAAdmin [-n ...

  6. hdfs haadmin使用,DataNode动态上下线,NameNode状态切换管理,数据块的balance,HA下hdfs-api变化(来自学习资料)...

    1.2.4集群运维测试 HA集群中两个namenode状态的管理命令 [root@mini2 hadoop-2.6.4]# bin/hdfs haadmin Usage: DFSHAAdmin [-n ...

  7. 【oracle11g,17】存储结构: 段的类型,数据块(行连接、行迁移,块头),段的管理方式,高水位线...

    一.段的类型: 1.什么是段:段是存储单元. 1.段的类型有: 表 分区表 簇表 索引 索引组织表(IOT表) 分区索引 暂时段 undo段 lob段(blob ,clob) 内嵌表(record类型 ...

  8. 【操作系统/OS笔记20】打开文件、文件数据块分配、空闲空间管理、多磁盘管理(RAID)、磁盘调度算法概述

    本次笔记内容: 12.12 打开文件的数据结构 12.13 文件的分配 12.14 空闲空间列表 12.15 多磁盘管理-RAID 12.16 磁盘调度 文章目录 打开文件 何谓"打开文件& ...

  9. Hadoop(八)Java程序访问HDFS集群中数据块与查看文件系统

    阅读目录(Content) 一.HDFS中数据块概述 1.1.HDFS集群中数据块存放位置 1.2.数据块(data block)简介 1.3.对分布式文件系统中的块进行抽象会带来很多好处 二.Jav ...

最新文章

  1. Hadoop核心机制详细解析
  2. mysql数据库备份(完全备份,增量备份)
  3. 不支持对系统目录进行即席更新_「目录」让你的文档结构一目了然
  4. 批量从网上下载图片、zip等文件到本地[java爬虫]
  5. 1.5.2 编译java程序
  6. iPhone开发知识和项目
  7. java-银行业务调度系统《十一》
  8. Android 开发高效工具之道
  9. Markdown 使用感受
  10. 高德地图设置中国经纬度范围
  11. 梦幻西游新资源的提取一
  12. Booth算法运算原理
  13. 四年背的单词 笔记目录
  14. 浏览器、html、css面试题(三)
  15. 物理卷、卷组与逻辑卷的关系及相关操作详述
  16. CollapsingToolbarLayout用法详解(简洁易懂)
  17. MyBatis配置加密, 解密
  18. 浅谈:前端如何赋能业务?
  19. [Neck] 空间金字塔池化【池化策略】(Space Pyramid Pool, SPP)模块和路径聚合网络【增强】(Path Aggregation Network, PANet)的结构
  20. 写给当初的你,现在的我

热门文章

  1. 用c语言输入首字母判断星期几,输入字母,判断星期几,求大神指点
  2. arcgis加载dwg显示一个点_DWG/DGN格式导入Arcgis;转化为shp格式;更改地理坐标;导入Google Earth...
  3. conv2d 公式_Pytorch 从0开始学(6)——Conv2d 详解
  4. ElasticSearch概述(一)——简介
  5. java 模拟post上传文件_Java模拟post请求上传文件
  6. 怎么把css改成打印,css 打印print
  7. linux max 函数,sched_get_priority_max()函数 Unix/Linux
  8. 使用邻接矩阵实现有向图最短路径Dijkstra算法
  9. fat32转ntfs工具无损数据安全转换_干货真香! 无损制作UD三分区教程,新手小白的福利来了...
  10. python //运算符