Hbase 存储相关知识

南墨1年前技术文章422

1.Hbase的写流程

Client 写入-> 存入MemStore,一直到MemStore 满-> Flush 成一个StoreFile,直至增长到一定阈值-> 触发Compact 合并操作-> 多个StoreFile 合并成一个StoreFile,同时进行版本合并和数据删除-> 当StoreFiles Compact 后,逐步形成越来越大的StoreFile -> 单个StoreFile 大小超过一定阈值后(默认10G),触发Split 操作,把当前Region Split 成2 个Region,Region 会下线,新Split出的2个子Region 会被HMaster 分配到相应的HRegionServer 上,使得原先1 个Region的压力得以分流到2 个Region 上

由此过程可知,HBase 只是增加数据,没有更新和删除操作,用户的更新和删除都是逻辑层面的,在物理层面,更新只是追加操作,删除只是标记操作。

用户写操作只需要进入到内存即可立即返回,从而保证I/O 高性能。

2.Hbase 的存储结构

Hbase 中的每张表都通过行键(rowkey)按照一定的范围被分割成多个子表(HRegion),默认一个HRegion 超过256M 就要被分割成两个,由HRegionServer管理,管理哪些HRegion 由Hmaster 分配。HRegion 存取一个子表时,会创建一个HRegion 对象,然后对表的每个列族(Column Family)创建一个store 实例, 每个store 都会有0 个或多个StoreFile 与之对应,每个StoreFile 都会对应一个HFile,HFile 就是实际的存储文件,一个HRegion 还拥有一个MemStore 实例。

3.HDFS 和HBase 各自使用场景

首先一点需要明白:Hbase 是基于HDFS 来存储的。

HDFS:

1. 一次性写入,多次读取。

2. 保证数据的一致性。

3. 主要是可以部署在许多廉价机器中,通过多副本提高可靠性,提供了容错和恢复机制。

HBase:

1. 瞬间写入量很大,数据库不好支撑或需要很高成本支撑的场景。

2. 数据需要长久保存,且量会持久增长到比较大的场景。

3. HBase 不适用与有join,多级索引,表关系复杂的数据模型。

4. 大数据量(100s TB 级数据)且有快速随机访问的需求。如:淘宝的交易历史记录。数据量巨大无容置疑,面向普通用户的请求必然要即时响应。

5. 业务场景简单,不需要关系数据库中很多特性(例如交叉列、交叉表,事务,连接等等)。


相关文章

Kafka日志管理

Kafka在运行时会生成大量的日志记录信息,包含了运行状态、错误信息、性能指标等。这些日志文件会占用很大的磁盘空间,过多的日志文件也会影响Kafka的性能,因此需要采取一些日志管理措施来清理无用的日志...

LINUX 安全运维-用户密码

密码策略linux作为一个多用户的系统,我们还是不可避免的会去新增很多用户,我们不能保证每一个用户具有很好的安全意识,所以只能在用户的密码以及用户的远程访问上做一些限制,我们先介绍Linux用户密码策...

通过Nodeport方式暴露集群

通过Nodeport方式暴露集群

一、原理图二、通过deployment部署双副本nginx,两个Pod[root@172-16-121-211 ~]# cat nginx-delpayment01.yml apiVersion: a...

PG查询性能Top SQL

一、查询当前正在运行的Top SQL    查询当前正在运行的会话中耗时最长的Top SQL,where条件可按需修改SELECT pgsa.datname AS database_name    ...

MySQL运维实战之ProxySQL(9.8)SQL镜像

使用proxysql的镜像(mirror)功能,可以将SQL发送到一个额外的后端实例执行。还可以将发送到镜像的SQL进行改写,以测试修改后的SQL是否能正常执行。通过mirror_flagOut字段,...

数据湖技术之iceberg(十二)Flink与Iceberg整合-SQL API操作

数据湖技术之iceberg(十二)Flink与Iceberg整合-SQL API操作

1.SQL API 创建Iceberg表并写入数据StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnv...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。