HBase简介
HBase 的全称是 Hadoop Database,是一个分布式的,可扩展,面向列簇的数据库。HDFS 为 Hbase 提供了可靠的底层数据存储服务,Zookeeper 为 Hbase 元数据管理和协调服务,Hbase 是一个通过大量廉价的机器解决海量数据的高速存储和读取的分布式数据库解决方案。HBase 的原型是谷歌的分布式存储系统 BigTable,是谷歌 BigTable 的开源实现。
HBase基本概念
- Table:表,一个表包含多行数据。
- RowKey:列,行的主键,唯一标识一行数据,用于检索记录。
- Column Family:列簇,同一个列簇下的列具有多个列簇前缀,通常将同一类型的列存放在一个列簇下。如userInfo表示一个列簇,改列簇下可以包含age、name等列。
- Qualifier:列,以列簇为前缀,格式为: Column family:Qualifier。
- Timestamp:时间戳,对单元格操作是的时间戳,用于作为单元格的版本号,时间戳倒序排序,即最新的数据排在前面
- Cell:单元格,单元格,在 HBase 中,值作为一个单元保存在单元格中。要定位一个单元,需要满足 “rowkey + column family + qualifier + timestamp” 四个要素。每个 cell 保存着同一份数据的多个版本。cell 中没有数据类型,完全是字节存储。
- Master:主要负责 HBase 系统的各种管理工作:
- 处理用户的各种管理请求,包括建表、修改表、权限操作、切分表、合并数据分片以及 Compaction 等。
- 管理集群中所有 RegionServer,包括 RegionServer 中 Region 的负载均衡、RegionServer 的宕机恢复以及 Region 的迁移等。
- 清理过期日志以及文件,Master 会每隔一段时间检查 HDFS 中 HLog 是否过期、HFile 是否已经被删除,并在过期之后将其删除。
- RegionMaster: RegionServer 主要用来响应用户的 IO 请求,是 HBase 中最核心的模块,由 WAL(HLog)、BlockCache 以及多个 Region 构成。
- region :数据表的一个分片,当数据表大小超过一定阈值就会“水平切分”,Region 是集群负载均衡的基本单位。一个 Region 由一个或者多个 Store 构成, Store 的个数取决于表中列簇(column family)的个数,有多少个列簇就有多少个 Store。
- store:Store:由两部分组成:MemStore 和 StoreFile。MemStore 称为写缓存,用户写入数据时首先会写到 MemStore,当 MemStore 写满之后(缓存数据超过阈值,默认 128M)系统会异步地将数据 flush 成一个 HFile 文件。显然,随着数据不断写入,HFile 文件会越来越多,当 HFile 文件数超过一定阈值之后系统将会执行 Compact 操作,将这些小文件通过一定策略合并成一个或多个大文件。
- storeFile(HFile):HBase 的数据最终是存放在 HDFS 上的,StoreFile 在 HDFS 上称为 HFile。
- region :数据表的一个分片,当数据表大小超过一定阈值就会“水平切分”,Region 是集群负载均衡的基本单位。一个 Region 由一个或者多个 Store 构成, Store 的个数取决于表中列簇(column family)的个数,有多少个列簇就有多少个 Store。
- HLog:Write ahead log(WAL),即日志先行。HLog 在 HBase 中有两个核心作用:一是保证数据的可靠性,在进行写入的时候先写日志。HBase 数据随机写入时,并非直接写入 HFile 数据文件,而是先写入缓存,再异步刷新落盘。其次是用于主从复制。这和MySQL类似。
- cache:HBase 系统中的读缓存。客户端从磁盘读取数据之后通常会将数据缓存到系统内存中,后续访问同一行数据可以直接从内存中获取而不需要访问磁盘。
- HBase客户端:提供了 Shell 命令行接口、原生 Java API 编程接口、Thrift/REST API 编程接口以及 MapReduce 编程接口。
HBase视图
逻辑视图
从逻辑视图来看,HBase中的数据是以表的形式进行组织的,和关系型数据库十分类似。HBase将按照rowKey字典序排序存储。访问HBase有三种方式:
- 通过单个rowKey访问
- 通过rowKey的range
- 全表扫描
物理视图
从物理视图来看,HBase 是一个 Map,由键值 KV 构成,不过与普通的 Map 不同,HBase 是一个稀疏的、分布式的、多维排序的 Map。HBase 中 Map 的 key 是一个复合键,由 rowkey、column family、qualifier 以及 timestamp 组成,value 即为 cell 的值。
HBase架构
- HBase 是典型的 Master-Slave 模型,系统中有一个管理集群的 Master 节点以及大量实际服务用户读写的 RegionServer 节点。
- HBase 中所有数据最终都存储在 HDFS 系统中,为数据提供了高可靠的保障。
- Zookeeper 节点为 HBase 集群提供了协调管理的作用。
- 实现 Master 高可用:通常情况下系统中只有一个 Master 工作,一旦 ActiveMaster 由于异常宕机,ZooKeeper 会检测到该宕机事件,并通过一定机制选举出新的 Master,保证系统正常运转。
- 管理系统核心元数据:比如,管理当前系统中正常工作的 RegionServer 集合,保存系统元数据表 hbase:meta 所在的 RegionServer 地址等。
- 管理系统核心元数据:比如,管理当前系统中正常工作的 RegionServer 集合,保存系统元数据表 hbase:meta 所在的 RegionServer 地址等。
- 实现分布式表锁:HBase 中对一张表进行各种管理操作(比如 alter 操作)需要先加表锁,防止其他用户对同一张表进行管理操作,造成表状态不一致。和其他 RDBMS 表不同,HBase 中的表通常都是分布式存储,ZooKeeper 可以通过特定机制实现分布式表锁。
