HBase

HBase

HBase是一个面向列(老师讲的面向列,但是应该不是)的分布式数据库,主要用于存储非结构化和半结构化的数据。

HBase 数据模型

HBase是一个稀疏、多维度、排序的映射表,其索引是行键(Row Key)、列族(Column Family)、列限定符(Column Qualifier)、时间戳(Timestamp)。

例如:

ID(行键) Version(时间戳) Info(列族)
姓名(列限定符) 联系方式
10001 2012 张三 110
2015 张三 114
10002 2011 李四 119
2016 李四 120

1.表
利用表来组织数据,由行与列组成,列同时又被分为多个列族。

2.行
表由若干行组成,每个行由行键进行标识,行键(最大64kb,实际运用过程中:10-100字节)按照字典顺序排序。

3.列族
表中的列名以列族作为前缀,每个“列族”都可以有多个列(column),列族是基本的访问控制单元。

4.列限定符
数据在列族中通过列限定符定位,列限定符没有数据类型。

5.单元格
由行、列族和列限定符来确定唯一的一个单元格。单元格中的存储的数据同样没有数据类型,所有的数据都是未解析的字节数组。单元格可以有多个内容,这些内容对应不同的时-间戳,

6.时间戳
每个单元格都可能存在着多个版本的内容,这些不同的版本由时间戳来进行区分。

HBase访问接口

API类型 特点 适用场合
Native Java API 最常规和高效的访问方式 适合Hadoop MapReduce Job并行批处理HBase表数据
HBase Shell HBase的命令行工具,最简单的接口 适合HBase管理使用
Thrift Gateway 利用Thrift序列化技术,支持C++,PHP,Python等多种语言 适合其他异构系统在线访问HBase表数据
REST Gateway 解除了语言限制 支持REST 风格的Http API访问HBase
Pig 可以使用Pig Latin流式编程语言来操作HBase中的数据,和Hive类似,本质最终也是编译成MapReduce Job来处理HBase表数据 适合做数据统计
Hive 简单 当前Hive的Release版本尚没有加入对HBase的支持,但在下一个版本Hive 0.7.0中将会支持HBase,可以使用类似SQL语言来访问HBase

存储格式

HBase中的所有数据文件都存储在Hadoop HDFS文件系统上,主要包括两种文件类型:

  1. HFile:StoreFile在底层的实现方式,HFile是Hadoop的二进制文件,Hfile数据块常用压缩方式存储。

  2. HLog File,HBase中WAL(Write Ahead Log)预写试日志,用来做灾难恢复,是一种Hadoop的Sequence File。

HBase 的功能组件

库函数:链接到每个客户端;
主服务器Master:负责管理和维护表的分区信息;
Region服务器:负责管理和维护分配给自己的Region,处理来自客户端的读写请求;

HBase运行机制

HBase系统架构

  • 客户端
  • Zookeeper服务器
  • Master主服务器
  • Region服务器

Zookeeper

帮助协调多台机器组成的集群提供稳定可靠的协同服务。Zookeper中保存了-ROOT-表的地址和Master。

Master服务器

负责表与Region的管理工作。

Region服务器

HBase中最核心的模块,管理和维护分配给自己的Region,响应Client的读写请求。

Region

HBase表中的的数据都是通过行键进行划分维护的,当数据量非常庞大时,就不能将所有的数据都存储在同一机器上,需要将数据分布存储于多台机器之中。所以对需要对行键进行划分区间,一个Region管理一个区间内的数据。Region的默认大小是100M-200M。一个RegionServer又管理多个(10~1000)个Region。

HBase读流程

(1)客户端先从Zookeeper中得到.META表Region的位置,然后再读取.META表的数据。
(2)根据namespace、表名和行键在meta表中找到对应的region信息。(三层定位操作)
(3)找到对应的RegionServer。
(4)查找对应的Region
(5)先从Memstore(缓存)中找数据,如果没有找到,再到StoreFile中去读。

HBase写流程

(1)Client先访问Zookeeper得到meta表Region的位置,然后再读取.META表的数据。
(2)根据namespace、表名和行键在meta表中找到对应的region信息。
(3)找到对应的RegionServer。
(4)Client向RegionServer发出写请求,RegionServer先将操作和数据写入HLog(预写日志),再将数据写入MemStore。当MemStore中的数据丢失、损坏,可以从HLog上恢复。
(5)MemStore达到一个阈值将数据生成为一个StoreFile文件。
(6)当Store中StoreFile的数量超过阈值时,将若干小StoreFile合并(Compact)为一个大StoreFile。
(7) 但是当StoreFile越来越大时,又会触发Split操作,把当前的StoreFile分成2个,相当于把一个Region分成两个Region。

上一篇:总结《HBase原理与实践》第七、八章


下一篇:HBase-Compact-PressureAwareCompactionThroughputController分析