title | date |
---|---|
HBase |
2019-03-06 |
HBase 是建立在 HDFS 基础上的面向列的分布式数据库。
- HBase 参考了谷歌的 BigTable 建模,实现的编程语言为 Java。
- 它是 Hadoop 项目的子项目,运行于 HDFS 文件系统之上。
HBase 适用场景:实时地随机访问超大数据集。
在 CAP 理论中,HBase 属于 CP 类型的系统。
HBase 是一个面向列的数据库,在表中它由行排序。
HBase 表模型结构为:
- 表(table)是行的集合。
- 行(row)是列族的集合。
- 列族(column family)是列的集合。
- 列(row)是键值对的集合。
HBase 表的单元格(cell)由行和列的坐标交叉决定,是有版本的。默认情况下,版本号是自动分配的,为 HBase 插入单元格时的时间戳。单元格的内容是未解释的字节数组。
行的键也是未解释的字节数组,所以理论上,任何数据都可以通过序列化表示成字符串或二进制,从而存为 HBase 的键值。
和 HDFS、YARN 一样,HBase 也采用 master / slave 架构:
- HBase 有一个 master 节点。master 节点负责将区域(region)分配给 region 节点;恢复 region 节点的故障。
- HBase 有多个 region 节点。region 节点负责零个或多个区域(region)的管理并相应客户端的读写请求。region 节点还负责区域的划分并通知 master 节点有了新的子区域。
HBase 依赖 ZooKeeper 来实现故障恢复。
HBase 表按行键范围水平自动划分为区域(region)。每个区域由表中行的子集构成。每个区域由它所属的表、它所含的第一行及最后一行来表示。
区域只不过是表被拆分,并分布在区域服务器。
区域分配、DDL(create、delete)操作由 HBase master 服务器处理。
- master 服务器负责协调 region 服务器
- 协助区域启动,出现故障恢复或负载均衡情况时,重新分配 region 服务器
- 监控集群中的所有 region 服务器
- 支持 DDL 接口(创建、删除、更新表)
区域服务器运行在 HDFS 数据节点上,具有以下组件
-
WAL
- Write Ahead Log 是 HDFS 上的文件。WAL 存储尚未持久存储到永久存储的新数据,它用于在发生故障时进行恢复。 -
BlockCache
- 是读缓存。它将频繁读取的数据存储在内存中。至少最近使用的数据在完整时被逐出。 -
MemStore
- 是写缓存。它存储尚未写入磁盘的新数据。在写入磁盘之前对其进行排序。每个区域每个列族有一个 MemStore。 -
Hfiles
- 将行存储为磁盘上的排序键值对。
HBase 使用 ZooKeeper 作为分布式协调服务来维护集群中的服务器状态。Zookeeper 维护哪些服务器是活动的和可用的,并提供服务器故障通知。集群至少应该有 3 个节点。
HBase | RDBMS |
---|---|
HBase 无模式,它不具有固定列模式的概念;仅定义列族。 | RDBMS 有它的模式,描述表的整体结构的约束。 |
它专门创建为宽表。 HBase 是横向扩展。 | 这些都是细而专为小表。很难形成规模。 |
没有任何事务存在于 HBase。 | RDBMS 是事务性的。 |
它反规范化的数据。 | 它具有规范化的数据。 |
它用于半结构以及结构化数据是非常好的。 | 用于结构化数据非常好。 |
Java API 归纳总结在这里:Hbase Java API
HBase 命令行可以参考这里:HBase 命令行