HBase的简单介绍,寻址过程,读写过程
HBase是列族数据库,主要由,表,行键,列族,列标识,值,时间戳 组成,
表 其中HBase 主要底层存储依赖与hdfs,可以在HDFS中看到每个表名都作为一个独立的目录结构
行 每一行都已行键作为唯一表示,是不可分割的字节数组,在HBase内部主要以行键由低到高存储在表中
列族 一些列的集合,用户在插入数据的时候必须确定列族,在内部以字符串格式进行存储
列标识 用以表示指定的列, 存储方式二进制
值 在HBase 中 以指定的 列族 列表示,行键 来确定唯一的 单元格, 值以二进制方式存储,里面可保存多个版本,最新的数据排在最前面
时间戳 默认情况下 每一个单元格插入数据时,都会用时间戳进行标识,若时间戳未指定,则插入最新数据,查询时也是如此,其中默认保存3个版本数据
寻址过程
在上面说了,每一行 都以行键(RowKey)排序, 如果数据量较大,这些数据就会在 行的方向上进行划分
划分为多个Region,当表中的Region 越来越多时,多到无法存储在一台机器上时, Master主服务器就会把不同的Region分配到不同的Region 的服务器上
但RowKey相同的Region不会被拆分到 不同Region 服务器上,通常每个Region 服务器会放置10~1000个Region, 当查询数据时,将开始Region定位
每个Region 都这三个要素组成,Region 所属的表,第一行,最后一行 每个Region 都有个RegionID来标识其唯一性
Region 标识符表示为 表名+开始行键+RegionID
Meta表 中存了 Region 与 Region标识符之间的对应关系,可以用scan命令查看Mate表的结构,当数据表特别大时,mate也需要分区,记录Region
Region 定位,
客户端,通过Zookeeper 获取Meta表分区存储的地址,所需的行键Region信息,然后从Region 服务器上找到所需的数据。一般获取信息后会缓存,使用户不必从ZooKeeper 开始寻址。
读写过程
Region服务器主要 有 HLog 和Region 块组成,HLog 主要,记录Region 的操作日志,
Region 对象主要由多个Store 组成 每个store对应当前分区的 一个列族,并且管理一块内存,即MemStroe
当MemStore 中的数据达到一定条件,会写入StoreFile文件中,每个Store 包含若干StoreFile 文件 StoreFile 对应HDFS中,Hfile文件
MemStore HBase 将数据缓存在其中,持久化到HDFS中完成排序,在顺序写入HDFS中
Store 随着数据量增加 storefile文件数量也在增加,当数量达到一定程度的时候,会合并成一个大的StoreFile文件,随着文件不断合并,Region也会不断变大这样会促使Region进行分裂
Region 一个父Region 会分裂成两个子 Region 会被Master 分配到相应的Region 服务器上
Hlog 如果MemStore 上数据丢失 可以从HLog上恢复
写入过程,
1.客户端访问ZookKeeper 从Mate表中得到写入数据对应的Region信息,和相应的Region 服务器
2客户端访问 Region服务器,将数据写入HLog和MemStore中,当MemStore 达到阈值后 将数据写入 StoreFile中,再在HLog中打上一个标记,表示已经写入
3.当多个StoreFile文件达到阈值后 触发Store.compact()将文件进行合并.
读取过程
1.客户端访问Zookeeper 从Mate表中读取Region信息对应的服务器
2.客户端向对应的Region服务器发送读数据的请求,Region接受请求后 从MemStore中查找数据,若没有,再从StoreFile读取,然后再将数据返回给客户端。