HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统” 。就像 Bigtable 利用了 Google 文件系统(File System)所提供的分布式数据存储同样,HBase 在 Hadoop 之上提供了相似于 Bigtable 的能力。HBase 是 Apache 的 Hadoop 项目的子项目。HBase 不一样于通常的关系数据库,它是一个适合于非结构化数据存储的数据库。另外一个不一样的是 HBase 基于列的而不是基于行的模式。数据库
HBase 以表的形式存储数据。表由行和列组成。列划分为若干个列簇(column family),以下图所示。数组
RowKey 可使用任意字符串(最大长度为 64KB,实际应用中长度通常为 10 ~ 100bytes),在 HBase 内部,Row Key 保存为字节数组。负载均衡
在 HBase 使用过程当中,设计 RowKey 是一个很重要的环节。咱们在进行 RowKey 设计的时候可参照以下步骤:分布式
与 NoSQL 同样,RowKey 是用来检索记录的主键。访问 HBase table 中的行,只有三种方式:oop
物理存储上 HBase 将 Table 在行的方向上分割为多个 HRegion, 每一个 HRegion 分散在不一样的 HRegionServer 中。设计
每一个 HRegion 由多个 Store 构成, 每一个 Store 由一个 memStore 和0或多个 StoreFile 组成, 每一个 Store 保存一个 Columns Family。3d
HBase 中的组件包括 Client、Zookeeper、HMaster、HRegionServer、HRegion、Store、MemStore、StoreFile、HFile、HLog 等。code
HBase 中的每张表都经过行键(RowKey)按照必定的范围被分割成多个子表(HRegion),一个 HRegion 超过必定阈值就要被分割成两个,这个过程由 HRegionServer
管理, 而 HRegion 的分配由 HMaster
管理。server
HMaster 仅仅维护 table 和 HRegion 的元数据信息,而 table 的元数据信息保存在 zookeeper 上,所以,HMaster 的负载很低。对象
table 在行的方向上分割为多个 HRegion ,HRegion 是 HBase 中分布式存储和负载均衡的最小单元,即不一样的 HRegion 能够分布在不一样的 HRegion Server 上,但同一个 HRegion 是不会拆分到多个 HRegion Server 上。
HRegion 按大小分割,每一个表通常只有一个 HRegion ,随着数据不断的插入表,HRegion 不断增大,当 HRegion 的某个列簇达到必定的阈值时就会分红两个新的 HRegion 。
HBase 依赖 Zookeeper,默认状况下 HBase 管理 Zookeeper 实例(启动或关闭 Zookeeper),HMaster 与 HRegionServers 启动时会向 Zookeeper 注册,使 HMaster 能够随时感知到各个 HRegionServer 的健康状态。
首先当一个请求发生时,HBase Client 使用 RPC 机制与 HMaster 和 HRegion Server 进行通讯。对于管理类操做,Client 与 HMaster 进行 RPC 通讯;对于数据读写操做,Client 与 HRegion Server 进行 RPC 通讯。
HBase Client 使用 RPC 机制与 HMaster 和 HRegion Server 进行通讯,但如何寻址呢?因为 Zookeeper 中存储了 Meta 表的地址和 HMaster 的地址,因此 HBase Client 须要先到 Zookeeper 上进行寻址。
HBase Client 访问 Zookeeper,能够根据 Meta 表获取到 HRegion Server 地址。