hbase不睡觉书重点
文章目录简介使用场景对比关系型数据库存储架构部署架构集群region serverstore访问流程增删改实质查询架构写入顺序查询顺序API简介使用场景数据量超过千万。数据分析需求弱,复杂查询少。实时性要求不高。对比关系型数据库关系型数据库:行的各个列都是不可分割的,存储在一起。Hbase:行是抽象的概念,每一列是离散的,不同列可在不同机器上。存储架构namespa......
·
简介
特点
- 优点:
- 大容量存储。支持P级别数据。
- 高ops。单节点1w+,集群可达百万+。
- 列扩展方便。
- client直接新增列即可,列为空不占存储空间。
- mysql需要执行ddl,并占默认空间。
- 扩容方便。新增节点后执行rebalance即可。
- 缺点:
- 不支持复杂查询。kv型,需要rowkey查询。
- 单点恢复时间较长。分钟级,保证CP。
- 长尾。受gc影响,999线是avg 20 倍左右。
- 部署较复杂。
- 对比关系型数据库:
- 关系型数据库:行的各个列都是不可分割的,存储在一起。
- Hbase:行是抽象的概念,每一列是离散的,不同列可在不同机器上。
使用场景
- 数据量超过千万。
- 数据分析需求弱,复杂查询少。
- 实时性要求不高。
CP
- 运行时强一致:对于每一个region同时只有一个region server提供服务。
- 故障时牺牲可用性:region server宕机,迁到其他region server,新region需要根据WAL来redo,这期间region不可用的,从而提高一致性。
存储架构
- namespace:
- table:创建时定义列族。
- rowkey: 不重复的字符串,决定行存储顺序(字典序)的唯一凭证。
- 列族:建表时确定,过期时间、缓存块大小等都是定义在列族上的,同一列族的列会尽量放在一台服务器上。
- 列:字段。
- 单元格:一个列的一个版本的值,版本号默认为写入的时间戳。
部署架构
典型部署
- 5节点zk集群+1主2备master+n个regionserver(每个2T容量)。
概念
- region server 是region 的容器。
- region ,一段数据的集合,或者说多个行的集合(分片):
- 不能跨服务器,一个region server上有多个region。
- 在数据量大的时候会分裂,负载均衡是也会在region server之间迁移。
- 基于HDFS,数据存取操作基于HDFS客户端接口。
- 用预拆分初始化和自动拆分管理region,大量删除数据后用online_merge合并region。
- master 负责跨region server 的操作,如建表、移动region、合并region等。
- zk 管理所有的region server,包括meta节点的地址。
- client和zk通信后直连region server,降低对master的依赖。
region server
- WAL:Write-Ahead Log,存在HDFS上。
- 环状滚动日志:写入效果最高、空间不会变大。
- 滚动条件:1、WAL所在的block快满;2、WAL空间大于block的阈值。
- WAL创建在
/hbase/.log
下,归档到/hbase/.oldlogs
下。 - 删除条件:当WAL不需要作为用来恢复数据的备份,即没有任何引用指向这个WAL文件。引用分类:
- TTL进程引用:超时时间(默认10min)。
- 进群备份引用:如开启replication,该进程在所有集群备份前引用。
store
- 一个store存放一个列族的数据。
- Memstore:一个store中一个memstore,内存存储对象,满了之后刷到HFile。
- 实现LSM树的组件:尽量保证数据是顺序存储到磁盘上,并有频率的整理,确保顺序性。从而在频繁的数据变动下保持系统读取的稳定性。
- HFile:MemStore满了之后生成新的HFile,由块组成,每个块包括:
- Data:数据块。
- BlockType:数据块等。
- 多个Cell:KeyValue键值对。
- Meta:元数据块,文件关闭时写入。
- FileInfo:文件信息,比如最后一个key,文件关闭时写入。
- DataIndex:数据块的索引。
- MetaIndex:元数据块索引。
- Trailer:各个块的偏移值。
- Data:数据块。
HDFS上的文件只能创建、删除、追加,不能修改。
WAL按照写入顺序排序,经过Memstore按照rowkey顺序排序。
访问流程
增删改实质
- 写入顺序WAL->Memstore->HFile
- 新增Cell,在HDFS上新增一条数据。
- 修改Cell,新增版本号更大(自定义版本号)的一条数据。
- 删除Cell,新增一条Delete类型的数据,即墓碑标记,相当于逻辑删除。
写入顺序
- WAL:基于HDFS,虽然已经持久化,但是时暂存日志,不区分store,不能直接读取。
- Memstore:整理成LSM树。
- 刷写(定时任务)之前,memstore容量如果到达阻塞阈值会暂停memstore的写入,可通过调大JVM堆解决。
- HFile:memstore达到尺寸上限或者刷写间隔,刷到HDFS
- Minor Compaction:store中的多个HFile合并为一个,达到TTL的数据会被移除。
- Major Compaction:store中的所有HFile合并为一个,达到TTL的和手动删除的数据会被移除。
查询架构
- 从zk上查有hbase:meta表的region server (meta节点)。
- 连接meta节点获取所有region的行键范围,并且缓存该meta信息。
- 直连包含目标rowkey的region server操作。
查询顺序
- BlockCache:缓存block块。一个region server只有一个blockCache
- Memstore
- HFile
部分API
- checkAndPut:CAS的应用,Hbase保证原子性。
- append:value后面增加字节组。
- increment:long类型value+1。
- RowMutations:组合多个操作为原子操作。
更多推荐
已为社区贡献1条内容
所有评论(0)