HBASE知识回顾

HBase 概念
NameSpace : 可以把NameSpace理解为RDBMS的“数据库”
Table:表名必须是能用文件路径里的合法名字(Hbase表映射为HDFS上文件)
Row : 在表里面,每一行代表一个数据对象,每一行都是以一个行键来进行唯一标识的,行键没有特定的数据类型,以二进制字节来存储
Column :Hbase的列由Column family 和Column qualifier 组成,由冒号(:)进行间隔,比如family :qualifier
RowKey : 可以唯一标识一行记录,不可被改变,改变的唯一方式,就是删除,然后再插入
Column Family:在定义HBase表的时候需要提前设置好列族,表中所有的列都需要组织在列祖里面,在文件系统中,一个Column Family中的Column是存储在一起的。列簇一旦确定好,就不允许更改了,因为更改会影响到真实的物理存储。
Column Qualifier:列族中的数据通过列标识来进行映射,Column Qualifer就是key,存储的值就是对应的value。
Cell:每一个行建,列簇,列标识共同组成的单元
TimeStamp:每一个值都有一个timestamp,作为该值特定版本的标识符。
 

 

Hbase与关系型数据库对比

属性 Hbase RDBMS
数据类型 只有字符串 丰富的数据类型
数据操作 增删改查,不支持join 各种各样的函数与表连接
存储模式 基于列式存储 基于表结构和行式存储
数据保护 更新后仍然保留旧版本 替换
可伸缩性 轻易增加节点 需要中间层,牺牲性能

Hbase的读取流程

读数据

HBase 中有一个内置的 hbase:meta 表,其中记录了所有表的所有 region 的详细信息

例如 region 的 开始KEY结束KEY所在server的地址……

HBASE知识回顾_第1张图片

hbase:meta 表就像一个目录,通过他可以快速定位数据的实际位置

hbase:meta 表是存储在 ZooKeeper 中的,所以客户端就需要先访问 ZooKeeper,获取到 hbase:meta,从中查询出目标数据是在哪个 regionserver 中的哪个 region 中,然后到 region 中进行读取

 

写数据

写操作会被分配到对应的 regionserver 进行处理,先回顾一下 regionserver 的结构

HBASE知识回顾_第2张图片

从客户端来看,写操作比较简单,写请求到达 regionserver 后,这些修改会先被写到 MemStore和 HLog 中,成功写入后便会通知客户端写入完成了

MemStore 是内存缓存,保存最近更新的数据
HLog 是日志文件,记录着所有的更新操作

对于系统来说,写操作还没完,系统会定期调用刷新缓存的方法,把MemStore中的内容写入文件,生成一个新的 StoreFile,然后把缓存清空,并在HLog中做一个标记,表明上面的内容已经写入文件

这样,数据就真正落地了,但写操作会引发一些后续问题,例如HLog日志文件越来越大了、StoreFile越来越多了、当前region越来越大了,所以,系统有还有更多的工作需要做

  • 系统会定期清理HLog日志文件,把其中已经写入文件的记录删除

  • 当 StoreFile 文件数量超过设定值时,会触发合并操作,合并成一个大文件,如果这个大文件超过了设定值,会再被分割开

  • region的大小达到阈值时,会被切分开,生成一个新的regionHMaster会对其进行管理,分配到合适的 regionserver

  • region的变化后,系统还需要对 hbase:meta 表进行维护

你可能感兴趣的:(大数据,hbase)