1、数据模型
- Namespace(表命名空间):表命名空间不是强制的,当想把多个表分到一个组去统一管理的时候才会用到表命名空间。
- Table(表):一个表由一个或者多个列族组成。数据属性,都在列族的定义中定义。
- Row(行):一个行包含多个列。列通过列族分类。由于HBase是一个列式数据库,所以一个行中的数据可以分布在不同的服务器上。
- Column Family(列族):列族是多个列的集合。列族的存在,提高存取性能。
- Column Qualifile(列):多个列组成一个行。列是可以随意定义的,一个行中的列不限名字、不限数量,只限定列族。
- Cell(单元格):一个列中可以存储多个版本的数据。每个版本就成为一个单元格。
- Timestamp(时间戳/版本号):用来标定同一个列中多个单元格的版本号。
注:
- 在HBase中,rowkey按照字典排序。
- HBase不支持表关联。
- HBase部分支持ACID。(ACID即:原子性、一致性、隔离性、持久性)。
2、宏观架构:
以上图形说明了HBase的服务器角色构成:
- Master:负责启动的时候分配Region到具体的RegionServer,执行各种管理操作,比如Region的分割和合并。
- RegionServer:RegionServer上有一个或者多个Region。我们读取的数据就存储在Region上。
- HDFS:hadoop的一部分。HBase不是直接和服务器的硬盘交互的,而是和HDFS交互。因此HDFS是真正承载数据的载体。
- Zookeepeer:在HBase中扮演的角色类似于一个管家。管理着HBase中所有的ResgionServer信息,包括具体数据段放在哪一个RegionServer上。
由图5-4可知:
一个ResgionServer包含有:一个WAL 和 多个Region。
WAL:预写日志,WAL是Write-Ahead Log的缩写。当操作到达Region的时候,HBase不管三七二十一把操作写到WAL里面去。HBase会先把数据放到基于内存实现的Memstore里,等数据达到一定的数量时才会刷写(flush)到最终储存的HFile内。
作用:解决宕机之后的操作恢复问题,保证数据不会丢失。
多个Region:一段数据的集合。Region相当于一个数据分片。每一个Region都有起始rowkey和结束rowkey,代表了它所存储的row范围。
图5-5是单个Region内部的结构:
一个Region包含有:每一个Region内都包含多个Stroe实例。
Store:一个Store对应一个列族的数据,若一张表内有两个列族,则在一个Region里面就有两个Store。Stroe内部有MemStore和HFile两部分组成。