这是我参与「第四届青训营 」笔记创作活动的的第9天
深入浅出HBase实战
HBase和关系型数据库的区别
Hbase以列簇组织数据,以行键索引数据
列簇需要在使用前预先创建,列名不需要预先声明,因此支持半结构化数据模型
支持保留多个版本的数据,(行键+列簇+列名+版本号)定位一个具体的值
HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
HBase架构设计
主要组件包括: HMaster:元数据管理,集群调度,保活 RegionServer:提供数据读写服务,每个实例负责若干个互不重叠的rowkey区间内的数据 ThriftSever:提供Thrift API读写的代理层 依赖组件包括: Zookeeper:分布式一致性共识协作管理,例如HMaster选主、任务分发、元数据变更管理等 HDFS:分布式文件系统,HBase数据存储底座。
Region热点切分-切分点选取
HBase原生提供的多种切分策略使用相同的切分点选择策略 目标:优先把最大的数据文件均匀切分 切分点选择步骤: 1、找到该表中哪个region的数据大小最大 2、找到该region内哪个column family的数据大小最大 3、找到column family内哪个HFile的数据大小最大 4、找到HFile里处于最中间位置的Data Block 5、用这个Data Block的第一条KeyValue的Rowkey作为切分点
Region碎片整合
当某些region数据量过小、碎片化,合并相邻region整合优化数据分布 AssignmentManager创建MergeTableRegionsProcedure执行整合操作 不搬迁实际数据,通过reference file定位原region的文件,直到下次compaction时实际处理数据 注意:只允许合并相邻region,否则会打破rowkey空间连续且不重合的约定。