1. Hbase简介
- Hbase定义
Hbase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库(非关系型数据库)
- Hbase数据模型
逻辑上,Hbase的数据模型同关系型数据库很类似,数据存储在一张表上,有行有列。但从Hbase的底层物理存储结构(K-V)来看,Hbase更像一个multi-dimensional map
Hbase是一个存数据的地方,不支持随机读写操作,若要修改/增加数据,把数据都下载下来改完重新上传,优化做的好,可以实现几十亿级信息秒级增删改查
- Hbase逻辑结构
1. 不同的列族放在不同的文件夹存储
2. row key(行键)按照字典序排序,只要唯一就行,不唯一就覆盖,插入任何数据都要写row key。不然就报错
3. region为一张表的切片而且是横向的切片,纵向切分的叫做列族,横向切分的叫做region
这样就可以避免全盘扫描,因为根据行键就能知道在那个region里
- Hbase物理存储结构
整个内容为store file,放入文件中存储
把store部分拿出来:
Hbase中对于每一行都单独存储,最后一行是对于phone的插入,同样类型取时间戳最大的;若为delete,且时间戳比前面的大,则不返回数据
TimeStamp:不同版本的数据根据timestamp进行区分
Type: 对于删除操作,其类型为Delete
- 数据模型
1. Name Space
命名空间,类似于关系型数据库的database概念,每个命名空间下有多个表。Hbase有两个自带的命名空间,分别是hbase和default,hbase存放的是Hbase内置的表,default表是用户默认使用的命名空间
2. Region
类似于关系型数据库的表概念,不同的是,Hbase定义表时只需要声明列族即可,不需要声明具体的列。这意味着,往Hbase写入数据时,字段可以动态、按需指定。因此,和关系型数据库相比,Hbase能够轻松应对字段变更的场景,一张表可以对应多个region,因为可以横向切分
3. Row
Hbase表中的每行数据都由一个RowKey和多个Column(列)组成,数据是按照Rowkey的字典顺序存储的,并且查询数据时只能根据Rowkey进行检索,所以Rowkey的设计十分重要
4. Column
Hbase中的每个列都由Column Family(列族)和Column Qualifier(列限定符)进行限定,例如info:name, info:age。建表时,只需指明列族,而限定符无需预先定义,列中有很多版本,加上版本就可以唯一确定一个cell
5. Time Stamp
用于标识数据的不同版本(version),每条数据写入时,如果不指定时间戳,系统会自动为其加上该字段,其值为写入Hbase的时间
6. Cell
由{rowkey,column Famliy: column Qualifier, time Stamp}唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存储
- Hbase基本架构
hadoop1.0无高可用,2.0高可用要自己配置很麻烦,3.0自带高可用;Hbase自带高可用
RegionSever的作用:
data:对数据进行增删改查操作
region:切分、合并
Master的作用:
Table:增加、删除、修改表(DDL)
RegionSever:分配region到每个RegionSever,监控每个RegionSever的状态
- Hbase Shell操作
DDL:
对于表:
create '表名','列族1','列族2'....
alter '表名', {NAME=>'列族',VERSION=>时间戳}
drop '表名'(先disable '表')
对于命名空间:
list_namespace:查看命名空间
create_namespace 'bigdata':创建命名空间
drop_namespace 'bigdata':删除命名空间(必须为空,否则要先删除表)
create_namespace '空间名'
create '空间名: 表名', '要创建的列族':在某个命名空间下创建表,没带命名空间的都是在默认default下
drop_namespace '空间名':要想删除命名空间,命名空间必须是空的,可以使用disable '空间名:表名'下线表,然后drop删除
DML:
put '表名','行键','列族(写法是列族:列)','值':增加数据
scan '表名':扫描表
get:扫描表
delete: 删除