HBase源码分析1—初识

20. 12 月 2017 hbase, 数据库 1

HBase是一种分布式的列式存储引擎,思路最早来源于2006年Google的BigTable,2007年HBase出现,成为BigTable的开源实现之一(其他的还有百度的Tera等,还没研究)。

Hadoop、Hive和HBase

图片来自 HBase The Definitive Guide, Figure 1-8

提到大数据,必会提到“3H”。Hadoop其实分两块,一块是存储(HDFS),另一块是数据处理(MapReduce)。Hive是基于Hadoop的ETL仓库,以HDFS为存储引擎、MapReduce为执行调度层,实现分布式的检索。无论是Hadoop还是Hive,都缺乏数据的实时读写和随机读写能力,只能用于ETL。而HBase则是基于HDFS的存储引擎,提供了Hadoop和Hive所不具备的实时、随机读写能力。

列式存储

列式存储(column-based)是相对于传统关系数据库的行存储(row-based)而言的。在传统关系数据库中,一整列的数据通常被顺序地储存在一起,读取一条记录的时候也是读出一整行。而在HBase中,数据是以列的维度顺序存储的。

图片来自 HBase The Definitive Guide, Figure 1-1

HBase中有列簇(Column Family)的概念,列簇是某些列的集合,每个列必定属于某一个列簇。HBase对数据的管理也是以列簇为单位的,所以必须在一开始必须定义好列簇。在同一个Region中(后面介绍)只会存储某一个列簇的一部分数据。

图摘自 https://www.ibm.com/developerworks/cn/analytics/library/ba-cn-bigdata-hbase/index.html

关于列簇的设置以及对性能的影响我想在后面的文章中讨论。

HBase系统架构

图摘自 https://www.ibm.com/developerworks/cn/analytics/library/ba-cn-bigdata-hbase/index.html

Client:提供操作Master的接口,使用rpc进行通信

ZooKeeper:管理系统信息(RegionServer,-ROOT-表等),master选举(HA)

Master:协调RegionServer,进行状态监测、负载均衡等工作

RegionServer:处理IO和Region,每个RegionServer管理多个Region

Region:实际存储数据的地方,每个Region只存储某个列族数据的一部分。当Region过大时会发生分裂,数据会分布到多个Region中。每个Region中包含若干Store对象。

Store:Store对象中有一个MemStore和一个HFile,MemStore可以被看做是一个写缓存;HFile通常是HDFS。另外Store中还有一个HLog,由于存储增量修改日志,HBase使用WAL(Write After Log)保证数据可用性。

推荐读物

HBase The Definitive Guide

HBase深入浅出

The Apache HBase Reference Guide

http://archive.cloudera.com/cdh5/cdh/5/hbase-1.2.0-cdh5.13.1/book.html


1 thought on “HBase源码分析1—初识”

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据