hbase 是一个分布式[集群]、可扩展[动态上下线]、支持海量存储的 nosql 数据库。相当于 bigtable,负责海量数据的存储。如果数据量小的时候不适合使用 hbase,因为生产上需要不断的切分和合并比较消耗资源。如果数据量比较大,可以做到几十亿条数据秒级查询。支持数据的增删改查,实现了 hdfs 的随机写操作。
一、数据模型
逻辑上,hbase 的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列。但从 hbase 的底层物理存储结构(k-v)来看,hbase 更像是一个 multi-dimensional map。下图的整个内容成为一张表。
【1】行键 rowkey: 是一张表中自动生成的唯一的、且有序的,按照“字典序”进行排序的主键;
【2】列族: 不同的列族放在不同的文件夹中,列族中的列可以有多个或者一个,列可以动态增加;
【3】region切片: 按照 rowkey 进行切分,如上是按照3个 rowkey 进行划分的。一般是按照数据量进行划分,这样访问时能够提高效率;
【4】store: 实际存储数据的文件,存放在 hdsf。如上表中的数据是放在 6个 store 中;
二、hbase 物理存储结构
根据每一个列进行存储,例如张三:包含rowkey、columnfamily列族、columnqualifier列名、timestamp时间戳[实现hd 的随机写操作,完全由次属性决定,它优化最大的地方就是时间戳,该属性非常重要,window与linux 一个用来操作一个用来存放时,需要两个操作系统的时间一定要相同,否则会出现很多问题]、type类型[put表示插入]、value存放的值。当修改一条数据时,其实会添加一条数据与旧数据不同的是时间戳和value,此时,在获取数据的时候,它只会获取时间戳最大的那条数据。当删除一条数据时,也是添加一条数据与旧数据不同的是时间戳和type,type类型是 delete。在获取的时候发现delete类型的时间戳比 put的时间戳大,那就不返回数据。那么旧的数据对用户而言就是垃圾数据了,此时hbase还会存储着,但是最终它还是会从内存中将垃圾干掉的。是在后期表的分合操作的时候删除的。
三、数据模型
【1】name space: 命名空间,类似于关系型数据库的 database概念,每个命名空间下有多张表。hbase 有两个自带的命名空间,分别是 hbase 和 default。hbase 中存放的是 hbase 内置的表,default 表是用户默认使用的命名空间。
【2】region: 类似于关系型数据库的表的概念。不同的是,hbase定义表时只需要声明列族即可,不需要声明具体的列。意味着,往 hbase中写入数据时,字段可以动态、按需指定。因此和关系型数据库相比,hbase能够轻松应对字段变更的场景。
【3】row: hbase 表中的每行数据由一个 rowkey和多个 column(列)组成,数据是按照 rowkey的字典顺序存储,并且查询数据时只能根据 rowkey 进行检索,所以 rowkey的设计十分重要。
【4】column: hbase 中的每个列都由 column family(列族)和 column qualifier(列限定符)进行限定,例如:info: name,info: age。建表时,只需要声明列族,而列限定名无需预先定义。
【5】timestamp: 用于表示数据的不同版本(version),每条数据写入时,如果不指定时间戳,系统会自动为期加上该字段,表示数据写入hbase 的时间。
【6】cell: 由{rowkey,column family,column qualifier,timestamp}唯一确定的单元,cell中的数据是没有类型的,全部是字节码形式存储的。
四、hbase 基本架构
【1】region切片需要分在 region server[多个,分布式的]上,region 中包含多个 store[存储实际的数据],刚开始操作的store是在内存中的,最终会在一定数量或时间时会flush到磁盘 storefile;
【2】region server 的作用: data:get、put、delete[update操作底层是新put了一条数据,时间戳和 value 会发生变化,delete 也是 put了一条数据,type是delete];region:splitregion、compactregion。作为 region 的管理者;
【3】master: 作为 hbase操作的入口,依赖于zk来管理集群,hbase 中的操作非常多,因此会将一些任务分配给zk,当 master挂掉之后,对数据的增删改查时没有问题的,但是对表级别的增删改查是不能完成的。master类似于ddl。zk类似于dml。作用:table 的 create,delete,alter;regionserver:分配 region 到每个 regionserver,监控每个 regionserver 的状态,负载均衡和故障转移;
【4】zk: hbase 通过 zk来做master的高可用,regionserver的监控、元数据的入口以及集群配置的维护等工作;
【5】hdfs: hdfs 为 hbase提供最终的底层数据存储服务,同时为 hbase提供高可用的支持;
发表评论