# HBase

# 简介

HBase 是建立在 HDFS 基础上的面向列的分布式数据库。

  • HBase 参考了谷歌的 BigTable 建模,实现的编程语言为 Java。
  • 它是 Hadoop 项目的子项目,运行于 HDFS 文件系统之上。

HBase 适用场景:实时地随机访问超大数据集。

CAP 理论 (opens new window)中,HBase 属于 CP 类型的系统。

# 基础

HBase 维护

# 原理

# 数据模型

HBase 是一个面向列的数据库,在表中它由行排序。

HBase 表模型结构为:

  • 表(table)是行的集合。
  • 行(row)是列族的集合。
  • 列族(column family)是列的集合。
  • 列(row)是键值对的集合。

img

HBase 表的单元格(cell)由行和列的坐标交叉决定,是有版本的。默认情况下,版本号是自动分配的,为 HBase 插入单元格时的时间戳。单元格的内容是未解释的字节数组。

行的键也是未解释的字节数组,所以理论上,任何数据都可以通过序列化表示成字符串或二进制,从而存为 HBase 的键值。

img

# HBase 架构

img

和 HDFS、YARN 一样,HBase 也采用 master / slave 架构:

  • HBase 有一个 master 节点。master 节点负责将区域(region)分配给 region 节点;恢复 region 节点的故障。
  • HBase 有多个 region 节点。region 节点负责零个或多个区域(region)的管理并相应客户端的读写请求。region 节点还负责区域的划分并通知 master 节点有了新的子区域。

HBase 依赖 ZooKeeper 来实现故障恢复。

# Regin

HBase 表按行键范围水平自动划分为区域(region)。每个区域由表中行的子集构成。每个区域由它所属的表、它所含的第一行及最后一行来表示。

区域只不过是表被拆分,并分布在区域服务器。

img

# Master 服务器

区域分配、DDL(create、delete)操作由 HBase master 服务器处理。

  • master 服务器负责协调 region 服务器
    • 协助区域启动,出现故障恢复或负载均衡情况时,重新分配 region 服务器
    • 监控集群中的所有 region 服务器
  • 支持 DDL 接口(创建、删除、更新表)

img

# Regin 服务器

区域服务器运行在 HDFS 数据节点上,具有以下组件

  • WAL - Write Ahead Log 是 HDFS 上的文件。WAL 存储尚未持久存储到永久存储的新数据,它用于在发生故障时进行恢复。

  • BlockCache - 是读缓存。它将频繁读取的数据存储在内存中。至少最近使用的数据在完整时被逐出。

  • MemStore - 是写缓存。它存储尚未写入磁盘的新数据。在写入磁盘之前对其进行排序。每个区域每个列族有一个 MemStore。

  • Hfiles - 将行存储为磁盘上的排序键值对。

img

# ZooKeeper

HBase 使用 ZooKeeper 作为分布式协调服务来维护集群中的服务器状态。Zookeeper 维护哪些服务器是活动的和可用的,并提供服务器故障通知。集群至少应该有 3 个节点。

img

# HBase 和 RDBMS

HBase RDBMS
HBase 无模式,它不具有固定列模式的概念;仅定义列族。 RDBMS 有它的模式,描述表的整体结构的约束。
它专门创建为宽表。 HBase 是横向扩展。 这些都是细而专为小表。很难形成规模。
没有任何事务存在于 HBase。 RDBMS 是事务性的。
它反规范化的数据。 它具有规范化的数据。
它用于半结构以及结构化数据是非常好的。 用于结构化数据非常好。

# API

Java API 归纳总结在这里:Hbase Java API

# 附录

# 命令行

HBase 命令行可以参考这里:HBase 命令行

# 更多内容

# 扩展阅读

# 参考资料

# 官方

# 文章