这是我参加参与「第四届青训营」笔记创作活动的的第5天
Hbase 是基于HDFS实现存储计算分离的分布式表格存储服务,容错,高可靠性;
HBase 核心数据模型
HBase是存储计算分离架构,以HDFS作为分布式存储底座.数据实际存储在HDFS.
HBase依赖Zookeeper实现元数据管理和服务发现.Client通过Zookeeper配置连接到HBase集群.
优点:半结构化,无数据类型;按列稀疏存储,缺省数据不占用存储空间;支持按需读写部分列,仅支持rowkey主键索引;
缺点:每条数据都要冗余存储行列信息;不支持二级索引,只能通过rowkey索引,仅支持单行内的原子性操作,无跨行事务保障;
1.HBase写流程:
数据先写入WAL持久化(用于宕机时恢复内存里丢失的数据)
再写入内存态 MemStore,以一种跳表(SkipList)数据结构提供有序的数据和高效的随机读写;
当满足特定条件时(比如内存中数据过多,或间隔时间过长),MemStore数据以HFile 格式写入 HDFS
2.HBase读流程:
首次读某个 rowkey 时,client 需要从 Zookeeper 获取 hbase:meta表位于哪个 RegionServer上; 然后访问该 RegionServer 查询 hbase:meta 表该 rowkey 对应 region 所在的 RegionServer B; Client 缓存该位置信息,去 RegionServer B 读取 rowkey;
基于该region内可能存在该rowkey的HFile和MemStore构建一个最小堆,用以全局有序地scan数据(具体实现可搜索参考 LSM tree 设计原理)
HMaster 主要组件
activemastermanager:管理active/backup状态
servermanager:管理集群内Regionserver状态
assignmentmanager:管理数据分片(region)状态
solitwalmanager:负责故障数据恢复的WAL拆分工作
LoadBalancer:定期巡检,调整集群负载状态
regionnormalizer:定期巡检&拆分热点,整合碎片
catalogjanitor:定期巡检,清理元数据;
cleaners:定期清理废弃的hfile/wal等文件;
masterfilesystem:封装访问客户端SDK
名词解释&作用
Compaction:HBase 基于策略和定期整理 HFile 文件集合,将多个有序小文件合并成若干个有序的大文件.
Bulkload:大批量向HBase导入数据的功能.使用MapReduce任务直接生成底层存储的HFile文件,并直接移动到HBase存储目录下,节省HBase写路径的开销从而提高写入效率.
Coprocessor:提供一套接口框架,给HBase原生接口添加类似lifecycle hook函数的能力,用来执行用户自定义的功能来扩展HBase的能力,例如二级索引,Observer等功能.
Filter:将用户的过滤逻辑下推到HBase服务端,避免无用数据传输处理开销来提高查询效率.
MOB:Medium Object Storage解决HBase对中等大小对象(10-100MB)的低延迟读写支持,拓宽HBase适用场景.
Snapshot:数据备份功能,将某一时刻的数据以及元数据备份,用于数据恢复,快照读,复制表等.
Replication:将一个HBase集群中的数据复制到目标HBase集群,使用WAL将变更记录同步到其他集群