当前位置: 首页 > java >正文

HDFS中块状态分析

HDFS中的Block状态分析

文件在HDFS里进行读取和存储的时候大都是以block的形式存在和表现。每个文件都可能会有很多个block,每个block又会根据配置文件中的replica的value设置有着多个备份。在NN(NameNode)中,称之为block的这些个东东,在DN(DataNode)中通常叫做replica(都是指的同一种东东)。Block在NN中和DN中随着操作的不同,会有多种状态,这些状态因不同的操作而触发,又因不同的操作而发生转变。下面就分别分析block在NN中和DN中的各种状态以及状态之间的转变。

1 DN端的block状态

DN端block状态都保存在DN的内存之中,目前的设计里共有五种状态。

1.1 FINALIZED状态

处于finalized状态的replica已经完成了其所有字节的写,replica的内容和长度都已固定,除非此replica响应append事件来reopen继续追加写,否则此replica不会被写入新的字节。并且,这种类型的replica其真实的replica data和meta data是相匹配的。此replica的存储在其余DN的备份也有着相同的block id和字节。但是有一点需要注意,这种replica的时间戳GS(generation stamp)不是一成不变的,当进行错误块恢复的时候,有可能会发生变化(变为块恢复时的时间)。

1.2 RWB状态

RWB是Replica Being Written to的缩写,一旦一个replica被创建或者之前的replica被追加数据,那么此replica就会变为RWB状态,这意味着这个replica正在被写入数据(是现在进行时哦,亲!)。这个块通常是一个正在被操作的文件(文件流未被关闭)的最后一个块。正因为处在“被写入数据”的状态,所以此replica的长度还未 确定,并且存储在磁盘上的此块的replica data和meta data也不一定是匹配的。此块的存储在其余DN上的replica可能有着不同的字节内容和长度。但是,此块的数据还是能够被reader看到的(读到的不一定是所有的数据)。为了防止意外,处于RWB状态的replica也要尽可能的持久化。

1.3 RWR状态

RWR是Replica Waiting to be Recovered的缩写,当DN死掉或者重启的时候,所有上述属于RBW状态的replica都会变成RWR状态。RWR状态的replica不会出现在传输数据的pipeline(通道,读和写等操作中,用此来进行传输block)中,因此也不会接收任何新的字节写入。这些状态的replica或者最终变为过期的数据,或者当客户端挂掉的时候参与到租约恢复中去。

1.4 RUR状态

当一个租约(客户端向NN申请的对一个文件的控制)过期并且发起包括此replica的块恢复机制之后,这个replica就会变为RUR状态,RUR就是Replica Under Recovery的缩写。

1.5 TEMPORARY状态

顾名思义,这个Temporary的replica就是处于under construction的块,它是当块复制或者集群做均衡操作时创建的临时块。这种状态的块和RBW状态的块有很多类似的地方,但是有一点显著的不同,就是其数据是不能被reader看到的。当块创建失败或者DN重启的时候,此状态的replica都会被删除掉。

在DN端的硬盘存储的层次上,有三个子目录:current、tmp、rbw。current用来存储处于finalized状态的replica,tmp用来存储temporary状态的replica,rbw用来存储rbw、rur、rwr状态的replica。并且:

(1)当块被客户端请求首次创建的时候,会被放入rbw目录下;

(2)当块是因为复制或者均衡操作被创建的时候,会被放入tmp目录;

(3)一旦一个块被finalized,就被移动到current目录;

(4)当数据节点重启时,tmp目录下的replica就被清空,rbw目录下的replica就转变为rwr状态,current目录下的replica变为finalized状态;

(5)当DN升级的时候,current和rbw目录下的块都会被保存在快照中。

2 NN端的block状态

NN端的block有四种状态。

2.1 UnderConstruction状态

一旦一个块被创建或者被追加数据,就会处于underConstruction状态,此时,数据库正在被写入新的数据。这样的块是当前正处于被写状态的文件的的最后一个块。它的块长度和GS都还没有最终确定,同DN端的rwb状态一样,此数据块对reader来说是可见的。并且,此类型的块还会保持对写入其本身的数据通道和对应的RWR状态的replica的追踪,以防Client挂掉。

2.2 UnderRecovery状态

当一个文件的租约过期时,如果此文件的最后一个block处于underConstruction状态,此块就会当块恢复开始的时候变为underRecovery状态。

2.3 Committed状态

一个处于committed状态的block,其内容和时间戳GS都已经确定,但是在DN中还没有一个replica和此committed的block有着相同的字节和GS。除非进行append追加操作,否则此committed状态的block的字节和GS都不会再发生变化。为了响应reader的请求,committed状态的block仍然会持有rbw状态的replica的地址和追踪已经变为finalized状态的replica的长度和GS。当客户端调用NN的close file或add new block时,操作流未关闭的文件的处于underConstruction状态的replica会被转变为committed状态。如果最后一个block处于committed状态,那么此block对应的文件是无法被关闭的,客户端必须要重试。AddBlock和close将会扩展到包含最后一个block的GS和长度。

2.4 Complete状态

一个处于complete状态的block,其长度和GS都是确定的,并且NN能够找到DN端GS和长度都对应的处于finalized状态的replica。Complete状态的block值会保持finalized状态的replica的地址。只有当所有的块都变为complete状态了,对应的文件才能被关闭。

和DN端的replica的状态不同,NN端的block的状态不会被持久化到磁盘上,当NN重启的时候,未关闭的文件的最后一个block会变为underConstruction状态,其余的块都变为complete状态。

3 replica在DN中的状态变化

(1)新的replica被创建

(1.1)如果是客户端发起,则replica以rbw状态开始;

(1.2)如果是NN的命令做块复制或者均衡,则replica以temporary状态开始;

(2)当DN重启时,rbw将转换为rwr状态;

(3)当租约过期时,replica进行块恢复时,其状态变为rur状态;

(4)客户端关闭时,replica若成功恢复,或者replica成功复制,都会将状态变为finalized;

(5)块进行错误恢复时,GS会变化;

4 block在NN中的状态变化

(1)当新的block被创建的时候,总是处于underConstruction状态

(1.1)或者是客户端发起addBlock事件,新增block到一个文件;

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数软件测试工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

**
[外链图片转存中…(img-5K4HYQ93-1712877144737)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

http://www.xdnf.cn/news/10955.html

相关文章:

  • ntoskrnl.exe损坏或丢失的解决方式
  • 【转载】什么是网站监测?网站监测包括哪些方面?
  • 如何给ocx,dll控件进行数字签名
  • 按键精灵参考代码
  • 标准的I/O缓冲:全缓冲,行缓冲,无缓冲
  • 苹果服务器装系统教程视频教程,苹果“雪豹”服务器系统安装傻瓜教程(多图)...
  • 无需公网IP,使用MCSM面板一键搭建我的世界Minecraft服务器联机游戏
  • 完整的腾讯面试经过
  • PaintedSkin 一款解决Android App 换肤功能的框架
  • Windows无法找到mfc71u.dll文件解决方法
  • ERR_CONTENT_LENGTH_MISMATCH 直接node能访问 通过nginx代理无法访问
  • 智能ABC知多少?
  • 注册了一个天网MAze网络系统,下载新方式
  • 免费虚拟现实软件下载(VEStudio2.0实时阴影Beta版)
  • 查询您所在的小区是否接入光纤
  • winkawaks模拟器
  • 正版破解软件下载站大全(转载
  • android pdf阅读器推荐,Android最强PDF阅读器 十款软件大PK
  • 如何检测网站死链接?
  • Android开发入门指南,精准学习,高效提升综合开发能力
  • 守望先锋ptr服务器位置,守望先锋测试服怎么进 守望先锋ptr怎么进
  • 移动平台3G手机网站前端开发布局技巧汇总
  • Nginx安装配置及伪静态配置
  • VS2015环境C1083: 无法打开包括文件: “matrix.h”: No such file or directory问题
  • 在CUDA上实现基于D3Q19模型的LBM流体模拟方法简介
  • 读《白骨精学习法》
  • Android OpenGLES2.0(一)——了解OpenGLES2.0
  • RAC1——Clusterware概念简介1
  • 并行计算教程简介 Introduction to Parallel Computing Tutorial
  • HandlerSocket的原理