跳至主要內容

一、了解HBase

安图新大约 5 分钟HBase

HBase 概述

HBase 是[Hadoop][]的生态系统,是建立在 Hadoop 文件系统(HDFS)之上的分布式、面向列的数据库,通过利用 Hadoop 的文件系统提供容错能力。如果你需要进行实时读写或者随机访问大规模的数据集的时候,请考虑使用 HBase!

HBase 作为 Google Bigtable 的开源实现,Google Bigtable 利用 GFS 作为其文件存储系统类似,则 HBase 利用 Hadoop HDFS 作为其文件存储系统;Google 通过运行 MapReduce 来处理 Bigtable 中的海量数据,同样,HBase 利用 Hadoop MapReduce 来处理 HBase 中的海量数据;Google Bigtable 利用 Chubby 作为协同服务,HBase 利用[Zookeeper][]作为对应。

 
 

HBase 处理数据

虽然 Hadoop 是一个高容错、高延时的分布式文件系统和高并发的批处理系统,但是它不适用于提供实时计算;HBase 是可以提供实时计算的分布式数据库,数据被保存在 HDFS 分布式文件系统上,由 HDFS 保证期高容错性,但是再生产环境中,HBase 是如何基于 hadoop 提供实时性呢? HBase 上的数据是以 StoreFile(HFile)二进制流的形式存储在 HDFS 上 block 块儿中;但是 HDFS 并不知道的 HBase 用于存储什么,它只把存储文件认为是二进制文件,也就是说,HBase 的存储数据对于 HDFS 文件系统是透明的。

HBase 与 HDFS

在下面的表格中,我们对 HDFS 与 HBase 进行比较:

HDFSHBase
HDFS适于存储大容量文件的分布式文件系统。HBase是建立在HDFS之上的数据库。
HDFS不支持快速单独记录查找。HBase提供在较大的表快速查找
HDFS提供了高延迟批量处理;没有批处理概念。HBase提供了数十亿条记录低延迟访问单个行记录(随机存取)。
HDFS提供的数据只能顺序访问。HBase内部使用哈希表和提供随机接入,并且其存储索引,可将在HDFS文件中的数据进行快速查找。

HBase 数据模型

HBase 通过表格的模式存储数据,每个表格由列和行组成,其中,每个列又被划分为若干个列族(row family),请参考下面的图:

 
 

现在我们来看看 HBase 的逻辑数据模型与物理数据模型(实际存储的数据模型):

逻辑数据模型:

 
 

物理数据模型:

 
 

HBase 架构

下图显示了 HBase 的组成结构:

 
 

通过上图我们可以得出 Hbase 中的每张表都按照一定的范围被分割成多个子表(HRegion),默认一个 HRegion 超过 256M 就要被分割成两个,由 HRegionServer 管理,管理哪些 HRegion 由 HMaster 分配。

现在我们来介绍一下 HBase 中的一些组成部件以及它们起到的作用:

  • Client:包含访问 HBase 的接口,并维护 cache 来加快对 HBase 的访问。

  • Zookeeper:HBase 依赖 Zookeeper,默认情况下 HBase 管理 Zookeeper 实例(启动或关闭 Zookeeper),Master 与 RegionServers 启动时会向 Zookeeper 注册。Zookeeper 的作用如下:

  • 保证任何时候,集群中只有一个 master

  • 存储所有 Region 的寻址入口

  • 实时监控 Region server 的上线和下线信息。并实时通知给 master

  • 存储 HBase 的 schema 和 table 元数据

  • HRegionServer:用来维护 master 分配给他的 region,处理对这些 region 的 io 请求;负责切分正在运行过程中变的过大的 region。

  • HRegion:HBase 表在行的方向上分隔为多个 Region。Region 是 HBase 中分布式存储和负载均衡的最小单元,即不同的 region 可以分别在不同的 Region Server 上,但同一个 Region 是不会拆分到多个 server 上。Region 按大小分隔,每个表一般是只有一个 region,当 region 的某个列族达到一个阈值(默认 256M)时就会分成两个新的 region。

  • Store:每一个 Region 由一个或多个 Store 组成,至少是一个 Store,HBase 会把一起访问的数据放在一个 Store 里面,即为每个 ColumnFamily 建一个 Store,如果有几个 ColumnFamily,也就有几个 Store。一个 Store 由一个 memStore 和 0 或者多个 StoreFile 组成。Store 的大小被 HBase 用来判断是否需要切分 Region。

  • StoreFile:memStore 内存中的数据写到文件后就是 StoreFile,StoreFile 底层是以 HFile 的格式保存。

  • HLog:HLog 记录数据的所有变更,可以用来恢复文件,一旦 region server 宕机,就可以从 log 中进行恢复。

  • LogFlusher:一个 LogFlusher 的类是用来调用 HLog.optionalSync()的。

  • HRegionServer:用来维护 master 分配给他的 region,处理对这些 region 的 io 请求;负责切分正在运行过程中变的过大的 region。

  • HRegion:HBase 表在行的方向上分隔为多个 Region。Region 是 HBase 中分布式存储和负载均衡的最小单元,即不同的 region 可以分别在不同的 Region Server 上,但同一个 Region 是不会拆分到多个 server 上。Region 按大小分隔,每个表一般是只有一个 region,当 region 的某个列族达到一个阈值(默认 256M)时就会分成两个新的 region。

  • Store:每一个 Region 由一个或多个 Store 组成,至少是一个 Store,HBase 会把一起访问的数据放在一个 Store 里面,即为每个 ColumnFamily 建一个 Store,如果有几个 ColumnFamily,也就有几个 Store。一个 Store 由一个 memStore 和 0 或者多个 StoreFile 组成。Store 的大小被 HBase 用来判断是否需要切分 Region。

  • StoreFile:memStore 内存中的数据写到文件后就是 StoreFile,StoreFile 底层是以 HFile 的格式保存。

  • HLog:HLog 记录数据的所有变更,可以用来恢复文件,一旦 region server 宕机,就可以从 log 中进行恢复。

  • LogFlusher:一个 LogFlusher 的类是用来调用 HLog.optionalSync()的。

HBase 的应用

  • HBase 是用来当有需要写重的应用程序。
  • HBase 可以帮助快速随机访问数据。
  • HBase 被许多公司所采纳,例如,Facebook、Twitter、Yahoo!、Adobe、OpenPlaces、WorldLingo 等等。
上次编辑于:
贡献者: Andy