现在的位置: 首页 > 大数据 > hadoop > 正文
hadoop系列之十:HBase简介
2014年04月08日 hadoop, 大数据 ⁄ 共 2170字 hadoop系列之十:HBase简介已关闭评论 ⁄ 被围观 5,425 views+

HBase是一个分布式的、面向列的开源数据库(列式数据库),该技术来源于Chang et al所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop的HDFS之上提供了类似于Bigtable的能力。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。

1、HBase的逻辑模型如下:

  • 以表的形式存放数据
  • 表由行与列组成,每个列属于某个列族,由行和列确定的存储单元称为元素
  • 每个元素保存了同一份数据的多个版本,由时间戳来标识区分

表现如下:

image

上图表示了HBase的基本逻辑结构,每一行由行健、时间戳、列族组成。

行健:

行键是数据行在表里的唯一标识,并作为检索记录的主键。

访问表里的行只有三种方式:

  • 通过单个行键访问
  • 给定行键的范围访问
  • 全表扫描

行键可以是最大长度不超过64KB的任意字符串,并按照字典序存储,对于经常要一起读取的行,要对行键值精心设计,以便它们能放在一起存储。

时间戳:

对应每次数据操作的时间,可由系统自动生成,也可以由用户显式的赋值。

Hbase支持两种数据版本回收方式:

  • 每个数据单元,只存储指定个数的最新版本
  • 保存指定时间长度的版本(例如7天)

常见的客户端时间查询:“某个时刻起的最新数据”或“给我全部版本的数据”。

元素由 行键,列族:限定符,时间戳唯一决定;元素以字节码形式存放,没有类型之分。

另外,HBase删除数据是通过追加删除标识,而非像关系型数据库一样直接物理删除。而是在后继合并是根据标识情况完成删除。此主要是由于HDFS底层所决定的。

因为时间戳的关系,HBase天生就是基于时间查询的数据库。

列族:

列族要事先定义,列族下可以有多个列,列族下的列无需提前定义。列表示为<列族>:<限定符>

上图的冒号后面,等号前面的就叫限定符。如html、cnnsi.com等。

Hbase在磁盘上按照列族存储数据,这种列式数据库的设计非常适合于数据分析的情形,列族里的元素最好具有相同的读写方式(例如等长的字符串),以提高性能。

2、HBase的物理模型如下:

2.1 Region和Region服务器

表在行方向上,按照行键范围划分成若干的Region;每个表最初只有一个region,当记录数增加到超过某个阈值时,开始分裂成两个region。而物理上所有数据存放在HDFS,由Region服务器提供region的管理。其特性如下:

  • 一台物理节点只能跑一个HRegionServer
  • 一个Hregionserver可以管理多个Region实例
  • 一个Region实例包括Hlog日志和存放数据的Store
  • Hmaster作为总控节点
  • Zookeeper负责调度

2.2 HLog

  • 用于灾难恢复
  • 预写式日志,记录所有更新操作,操作先记录进日志,数据才会写入

2.3 Memstore与storefile

  • 一个region由多个store组成,每个store包含一个列族的所有数据。即同一个列族的数据是存放到同一个store中的。
  • Store包括位于把内存的memstore和位于硬盘的storefile
  • 写操作先写入memstore,当memstore中的数据量达到某个阈值,Hregionserver会启动flashcache进程写入storefile,每次写入形成单独一个storefile
  • 当storefile文件的数量增长到一定阈值后,系统会进行合并,在合并过程中会进行版本合并和删除工作,形成更大的storefile
  • 当storefile大小超过一定阈值后,会把当前的region分割为两个,并由Hmaster分配到相应的region服务器,实现负载均衡
  • 客户端检索数据时,先在memstore找,找不到再找storefile

图解如下:

clip_image001[6]

2.4 -ROOT- 和 .META. 表

HBase中有两张特殊的Table,-ROOT-和.META.

.META.:记录了用户表的Region信息,.META.可以有多个regoin

-ROOT-:记录了.META.表的Region信息,-ROOT-只有一个region

Zookeeper中记录了-ROOT-表的location

clip_image001

3. HBase与传统行式数据库的对比

3.1 Hbase vs Oracle

  • 索引不同造成行为的差异
  • Hbase适合大量插入同时又有读的情况
  • Hbase的瓶颈是硬盘传输速度,Oracle的瓶颈是硬盘寻道时间
  • Hbase很适合寻找按照时间排序top n的场景

3.2 传统数据库的行式存储

传统行式数据库的特点:

  • 数据存放在数据文件内
  • 数据文件的基本组成单位:块/页
  • 块内结构:块头、数据区

传统行式数据库的问题:

  • 读某个列必须读入整行
  • 行不等长,修改数据可能导致行迁移
  • 行数据较多时可能导致行链

clip_image001[8]

clip_image001[10]

如上图中,如果要读取一个表中的三列,就需要将整个表读入内存,然后再筛选出需要的三列。

3.3 索引不同

一般行式数据库都采用B树索引或者B+树索引。而HBase采用LSM索引,LSM索引整合了B树索引的优势增加索引效率。

B树索引具有如下问题:

  • 空间代价,创建时间代价,维护代价
  • 重复值多时影响效率

如下图是B树索引结构图:

clip_image001[12]

LSM索引如下图:

image

LSM索引可以总结为:日志即数据!

抱歉!评论已关闭.

×