hbase的pdf

1. Hbase简介

  1. Hbase定义

  Hbase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库(非关系型数据库)

  1. Hbase数据模型

  逻辑上,Hbase的数据模型同关系型数据库很类似,数据存储在一张表上,有行有列。但从Hbase的底层物理存储结构(K-V)来看,Hbase更像一个multi-dimensional map

  Hbase是一个存数据的地方,不支持随机读写操作,若要修改/增加数据,把数据都下载下来改完重新上传,优化做的好,可以实现几十亿级信息秒级增删改查

  1. Hbase逻辑结构

  95186-uacd4ncw3o.png

  1. 不同的列族放在不同的文件夹存储

  2. row key(行键)按照字典序排序,只要唯一就行,不唯一就覆盖,插入任何数据都要写row key。不然就报错

  3. region为一张表的切片而且是横向的切片,纵向切分的叫做列族,横向切分的叫做region

  这样就可以避免全盘扫描,因为根据行键就能知道在那个region里

  1. Hbase物理存储结构

  整个内容为store file,放入文件中存储

  把store部分拿出来:

  21338-v3pknswvasg.png

  Hbase中对于每一行都单独存储,最后一行是对于phone的插入,同样类型取时间戳最大的;若为delete,且时间戳比前面的大,则不返回数据

  04101-twmvoqsymg9.png

  TimeStamp:不同版本的数据根据timestamp进行区分

  Type: 对于删除操作,其类型为Delete

  1. 数据模型

  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中的数据是没有类型的,全部是字节码形式存储

  1. Hbase基本架构

  hadoop1.0无高可用,2.0高可用要自己配置很麻烦,3.0自带高可用;Hbase自带高可用

  64325-7d3yi2gus8q.png

  RegionSever的作用:

  data:对数据进行增删改查操作

  region:切分、合并

  Master的作用:

  Table:增加、删除、修改表(DDL)

  RegionSever:分配region到每个RegionSever,监控每个RegionSever的状态

  33440-fv7guxlegqc.png

  1. 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: 删除

最后修改:2021 年 11 月 29 日
如果觉得我的文章对你有用,请随意赞赏