天天看点

HDFS内副本和块的状态分析

一 数据块(Block)和数据块副本(Replica)关系

Block是HDFS数据块的基本抽象,实现可Writable接口,可以序列化。 是NameNode数据块的表示。

Replica是DataNode数据块的表示,用于描述数据块副本。

二 Block和Replica状态

2.1Block 状态

UnderConstruction:表示这一个数据块正在构建,或者说正在被写入

UnderRecovery:表示数据块正在恢复,比如客户端正在写,但是突然出问题了,导致文件租约过期,那么该数据块就需要进行租约恢复和数据块恢复

Committed:客户端在写文件,请求新的的数据块的时候,每一次都会对上一次数据块进行提交。表示客户端已经把该数据块的所有数据都发送到DataNode组成的pipeline数据流管道中,并且已经收到下游的ACK响应,但是NameNode还没有收到任何一个DataNode汇报有Finalized状态的副本。

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

2.2Replica状态

Finalized:表示该数据块已经写完了,不再修改。

RBW(ReplicaBeing Written): 正在写的副本块

RUR(ReplicaUnder Recovery): 正在恢复的数据块副本,比如租约过期,导致租约恢复或者数据块恢复

RWR(ReplicaWaiting To Be Recovred): 正在等待被恢复的数据块副本,如果一个DataNode挂掉并重启,所有正在写的副本块就是RWR状态。RWR状态的副本不会出现在数据流管道中,等着进行租约恢复操作

Temporary:DataNode之间传输副本的时候,正在传输的副本状态就是临时的,临时副本是不可读,如果DataNode重启会删除临时状态的副本。

三 block和 replica的状态转换流程图

HDFS内副本和块的状态分析
HDFS内副本和块的状态分析

继续阅读