1.1 什么是HBase
①HBase 是个的分布式存储系统,利用HBASE 技术可在廉价 PC Server 上搭建起大规模结构化存储集群
②HBase 的目标是存储并处理大型的数据,更具体来说是仅需使用普通的硬件配置,就能够处理由成千上万的行和列所组成的大型数据。
③
④HBase 同样利用Hadoop MapReduce 来处理 HBase 中的海量数据
1.2 HBase 特点
1.海量存储 2.列式存储 3.极易扩展 4.高并发 5.稀疏
1.3 HBase架构
1)
Client 包含了访问 Hbase 的接口,另外 Client 还维护了对应的 cache 来加速 Hbase的访问,比如 cache 的.META.元数据的信息。
2)
HBase 通过 Zookeeper 来做 master 的高可用、RegionServer 的监控、元数据的入口以及集群配置的维护等工作。具体工作如下:
通过 Zoopkeeper 来保证集群中只有 1 个 master 在运行,如果 master 异常,会通过竞争机制产生新的 master 提供服务
通过 Zoopkeeper 来监控 RegionServer 的状态,当 RegionSevrer 有异常的时候
通过回调的形式通知 Master RegionServer 上下线的信息
3)
1.监控 RegionServer
2.处理 RegionServer 故障转移
3.处理元数据的变更
4.处理 region 的分配或转移
5.在空闲时间进行数据的负载均衡
6.通过 Zookeeper 发布自己的位置给客户端
4)
1.负责存储 HBase 的实际数据
2.处理分配给它的 Region
3.刷新缓存到 HDFS
4.维护 Hlog
5.执行压缩
6.负责处理 Region 分片
5)
HDFS 为 Hbase 提供最终的底层数据存储服务,同时为 HBase 提供高可用(Hlog 存储在 HDFS)的支持,具体功能概括如下:
提供元数据和表数据的底层分布式存储服务
数据多副本,保证的高可靠和高可用性
第 4 章 HBase 数据结构
4.1 RowKey
与 nosql 数据库们一样,RowKey 是用来检索记录的主键。访问 HBASE table 中的行,只有三种方式:
1.通过单个 RowKey 访问
2.通过 RowKey 的 range(正则)
3.全表扫描
4.2 Column Family
列族:HBASE 表中的每个列,都归属于某个列族。列族是表的 schema 的一部 分 (而列不是),必须在使用表之前定义。列名都以列族作为前缀。例如 courses:history, courses:math 都属于 courses 这个列族。
4.3 Cell
由{rowkey, column Family:columu, version} 唯一确定的单元。cell 中的数据是没有类型的,全部是字节码形式存贮。
关键字:无类型、字节码
4.4 Time Stamp
HBASE 中通过 rowkey 和 columns 确定的为一个存贮单元称为 cell。每个 cell 都保存 着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是 64 位整型。时间戳可以由 HBASE(在数据写入时自动 )赋值,此时时间戳是精确到毫秒 的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版 本冲突,就必须自己生成具有唯一性的时间戳。每个 cell 中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,HBASE 提供 了 两种数据版本回收方式。一是保存数据的最后 n 个版本,二是保存最近一段 时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。
第 5 章 HBase 原理
5.1 读流程
1)Client 先访问 zookeeper,从 meta 表读取 region 的位置,然后读取 meta 表中的数据。meta 中又存储了用户表的 region 信息;
2)根据 namespace、表名和 rowkey 在 meta 表中找到对应的 region 信息;
3)找到这个 region 对应的 regionserver;
4)查找对应的 region;
5)先从 MemStore 找数据,如果没有,再到 BlockCache 里面读;
6)BlockCache 还没有,再到 StoreFile 上读(为了读取的效率);
7)如果是从 StoreFile 里面读取的数据,不是直接返回给客户端,而是先写入 BlockCache, 再返回给客户端。
5.2 写流程
1)Client 向 HregionServer 发送写请求;
2)HregionServer 将数据写到 HLog(write ahead log)。为了数据的持久化和恢复;
3)HregionServer 将数据写到内存(MemStore);
4)反馈 Client 写成功。
5.3 数据 Flush(冲洗) 过程
1)当 MemStore 数据达到阈值(默认是 128M,老版本是 64M),将数据刷到硬盘,将内存中的数据删除,同时删除 HLog 中的历史数据;
2)并将数据存储到 HDFS 中;
3)在 HLog 中做标记点。
5.4 数据合并过程
1)当数据块达到 4 块,Hmaster 触发合并操作,Region 将数据块加载到本地,进行合并;
2)当合并的数据超过 256M,进行拆分,将拆分后的 Region 分配给不同的 HregionServer管理;
3)当 HregionServer 宕机后,将 HregionServer 上的 hlog 拆分,然后分配给不同的HregionServer 加载,修改.META.;
4)注意:HLog 会同步到 HDFS。