标签:
Hbase是一个分布式的、面向列的开源的kv数据库。
在2006年发起,是BigTable的山寨产品,07年成为Hadoop的子项目。在10年成为Apache的顶级项目。
众多社区的参与使得Hbase逐渐完善,在很多公司中使用。
Hbase的稳定性一直是个问题,但是使用它的还是很多。主要是因为其实际的存储模型能够与实际的业务匹配程度高相关的。
--- Key-Value类型的DB
仅仅适合对单一key的增删改查,以及扫库操作(扫全库 或者 扫一部分范围)。
数据按照key的字典序的顺序存储在管理实体中(存储方式并不复杂)。
---- 列式存储
区别传统数据库,建表时Schema必须要完善;而Hbase对Schema限制很少。
因为Hbase来源于Bigtable,存储网页数据,由于网页数据的稀疏特性(稀疏键值存储),有特殊的需求,即可以自由添加字段。对半结构化数据非常有用
---- 线性扩展
有点相比于传统数据库,这是任何分布式数据库系统的特征;
可以处理上P的数据
---- 高可用
设计运行在廉价的PC上,无单点问题
---- 强一致性
不同于最终一致性哈;强一致性要求低延时。
行:同一个Key对应的所有数据,行数量不设上限
列族:
--- 相似的列数据通常被划分为一个列族(如何划分呢?)
--- 数量有限,建表时指定,不同动态增加
--- 可以存储任意多得列
列:列名在写入时决定,数量可以很多
cell及时间戳(版本)
--- 每个cell可以有任意多个版本,指具体存储数据的单元;
--- 在每个单元中可以有多个版本;建表时制定每个列族可以保留多个版本
表:(抽象数据集合,表之间没有关联)
--- 类似于传统DBMS表,按照行row key值的字典序存储(从小到大),数据被组织到若干Region中,也就是一张表被切分成若干Region;
Region:(Hbase是负载均衡和调度的最小单位,也是能提供分布式服务的原因所在)
表切分后存储单元;Region内部的行是有序的。
Put/Get:针对某个key的读、写操作;可以独立写入某个Column
Scan:顺序扫库,Hbase原生提供的API接口;单一的客户端就可以Scan
Mapreduce:并发扫库,通过MR任务执行;
Bulk Load:一种快速导入大批量数据的入库方法;先根据Hbase存储的数据格式生成Hbase可以生成的格式,然后进行批处理方式入库
Replication:使用Journal(Hlog)实现数据备份;保持数据的鲁棒性,Hbase的不间断性提高;
Zookeeper集群:分布式锁服务,提供分布式环境下多机协调功能不存在单点问题;
提供通知服务(那些服务还活着?),定位Root Region等作用;
MasterServer:负载均衡、错误恢复、Meta数据的事务控制
RegionServer:slave节点,读写数据的操作;完成master分发的任务,比如split等
Hbase和Hadoop一起部署,NameNode和RegionServer一起部署,好处是可以共用HDFS,当本地管理性能好时,提高读写性能;
Master是分开部署的;
数据组织:
三级表结构:Root、Meta、UserTable
RootRegion表:由zookeeper确定,最多只有一个Region,记录Meta表每个Region的位置
Meta表:可能包含多个Region,Meta表记录各个表每个Region所在的服务器的位置
实际操作中,客户端会缓存Meta表的数据,知道有错误时才更新
存储方式:
系数矩阵-列式存储,在Hbase表分成多列,把每列当成一个文件来存储;很多列的数据属于同一行,但不存在一起。
基于HDFS:(HDFS只支持追加写,不支持随机写,若是在此不可更改的FS上实现可随机更新的DB是很复杂的)
基于廉价的硬件
支持较高的写入数据(写性能高于读性能)
LSM树:对新入数据的管理;传统的数据库采取的B+数;对处理频繁写入时,通过小树不断merge成大树的过程
数据单元:
稀疏结构的数据实质上是按照:row key + column + quallifier + version
顺序密集存储的原子数据
每行数据由若干条原子数据组成
底层文件结构:
HFILE:基于Block存储数据,Block索引常驻内存,默认BlockSize=64K,在表建立的时候可以指定BlockSize大小;
Flush:
内存容量有限,因此需要定期将内存数据Flush到磁盘
每次Flush,每个Region的每个Column Family会产生一个HFILE
读取操作是,RegionServer会将多个HFILE的数据归并到一起,并按照版本选择数据
Compaction:
Flush产生的HFILE会越来越多,需要归并以控制文件数量;
将旧数据进行清理;
Split:
Region数据会持续增长
需要进行Split,以实现负载均衡
split完成后,必须通报Master才能真正生效
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/feige1990/article/details/48028531