作者:晰mine | 来源:互联网 | 2023-09-16 19:21
假设一个Leaf Index Block可以容纳的Data Block的数量为x:
4 + 4 * (x + 1) + x * (12 + firstKey.length)
进一步假设,firstKey.length为50bytes。而一个Leaf Index Block的默认最大大小为128KB:
4 + 4 * (x + 1) + x * (12 + 50) = 128 * 1024
x ≈1986
也就是说,在假设firstKey.length为50Bytes时,一个128KB的Leaf Index Block所能容纳的Data Block数量约为1986个。
我们再来看看Root Index Chunk大小的计算方法:
基于firstKey为50 Bytes的假设,每往Root Index Chunk中新增一个Entry(关联一个Leaf Index Block),那么,curTotalRootSize的累加值为:
12 + 1 + 50 = 63
因此,一个128KB的Root Index Chunk可以至少存储2080个Entries,即可存储2080个Leaf Index Block。
这样, 一个Root Index Chunk所关联的Data Blocks的总量应该为:
1986 * 2080 = 4,130,880
而每一个Data Block默认大小为64KB,那么,这个HFile的总大小至少为:
4,130,880 * 64 * 1024 ≈ 252 GB
即,基于每一个Block中的FirstKey为50bytes的假设,一个128KB的Root Index Block可容纳的HFile文件总大小约为252GB。
如果实际的RowKey小于50 Bytes,或者将Data Block的Size调大,一个128KB的Root Index Chunk所关联的HFile文件将会更大。因此,在大多数场景中,Intermediate Index Block并不会存在。
附录2 关于HFile数据查看工具
HBase中提供了一个名为HFilePrettyPrinter的工具,可以以一种直观的方式查看HFile中的数据,关于该工具的帮助信息,可通过如下命令查看:
hbase org.apache.hadoop.hbase.io.hfile.HFile
References
HBase Architecture 101 – Storage
HBASE-3857: Change the HFile Format
HBase Document: Appendix H: HFile format
HADOOP-3315: New Binary file format
SSTable and Log Structured Storage: LevelDB
点击"阅读原文"链接,可了解华为云上的全托管式HBase服务CloudTable,集成了时序数据库OpenTSDB与时空数据库GeoMesa,目前已正式商用。
NoSQL主要泛指一些分布式的非关系型数据存储技术,这其实是一个非常广泛的定义,可以说涉及到分布式系统技术的方方面面。随着人工智能、物联网、大数据、云计算以及区块链技术的不断普及,NoSQL技术将会发挥越来越大的价值。
更多NoSQL技术分享,敬请期待!
【1】
【2】
【3】
【4】
【5】
【6】
【7】