前言
在上文HDFS全量块汇报(FBR)的限流机制中,笔者提到了对于目前HDFS FBR处理新的一个思路方向。大意是指将DataNode的块汇报粒度控制在NameNode这边来决定,而不是在DataNode这边。毕竟block report才是真正负责处理的角色。另一方面,单纯在DataNode端以per storage的方式进行block report拆分还不够灵活,随着实际存储密度性能的不断提升,每个storage所包含的block也将会不断的提升。基于这几点,社区曾经提出过讲block进一步进行逻辑上的拆分,拆成一个个小的segment段,然后在segment级别进行块的汇报。本文笔者来阐述的主题就是HDFS的基于Segment的Block Report设计。
Block的Segment划分
在这里Segment的意思是“片段”的意思,而对于FBR(Full Block Report)来说,我们的目标就是将一整块FBR拆成若干个小的Segment Block Report。因此这里需要做的一个事情是
将现有Block进行Segment划分。一种比较自然联想到的做法是根据Block Id进行区间划分,而社区的方案正是采用了这种方法的。
在每个Segment段内,代表的其实是一个range范围,从SegmentStart到SegmentEnd。 SegmentEnd-SegmentStart的值代表的是每个Segment所能包含的Block数。然后划分根据每个Block的Block Id进行Segment计算,然后进行划分,划分算