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)保证数据可用性。
推荐读物
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—初识”