HBase概念:
HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
它经常被描述为一种稀疏的,分布式的,持久花的,多维有序映射, 基于行键rowkey,列簇column family和时间戳timestemp.
HBase生态环境
HBase时Google Bigtable的开源实现,它的整个生态环境入下图
底层HDFS为HBase提供了可靠的文件存储
Map Reduce为它提供了高性能的计算
Pig和Hive提供了HBase的查询功能,Hive提供的方法类似与SQL语句,特别的方便
Sqoop提供了Hbase与关系数据库的导入导出功能
Zookeeper提供了协调以及failover功能.
HBase表结构
由上面的介绍可以看出,HBase有众多产品支撑,构成了一个大的生态环境.
HBase的表结构. 由下图可以看到,HBase的表时由RowKey,TS,column family组成的
RowKey, HBase的行键,是唯一标识,一般长度在50字节以内
Timestamp,每次记录数据的时间戳
Colulmn Family,列簇, 我的理解的是,多个列的概述,一张表可以有多个列簇,每个列簇下有多个column,这样就组成了一张表,在这里,列簇是预先定义好的,column是在执行过程中动态指定的,你可以随时添加一列,也可以删除一列,删除时,记得要先将table下线.
Row Key | Timestamp | Column Family | |
URI | Parser | ||
r1 | t3 | url=http://www.embracesource.com | title=hello |
t2 | host=www.embracesource.com | ||
t1 | |||
r2 | t5 | url=http://www.embracesource.com | content=工作 |
t4 | host=www.embracesource.com |
Region
两张特殊的Table
在HBase中,有两张特殊的表,分别叫做-ROOT-,.META.表,ROOT表记录了META表所在Region的信息,META表记录的用户表所在Region的信息,一个ROOT表只能有一个Region,但是META表可以有多个Region,这样也就构成了Zookeeper查找数据的结构,让我们来看下图所述.
当用户要读表信息时,流程是
1.发送请求信息到zookeeper, ZK返回ROOT表所在Region的位置信息
2.请求ROOT表,ROOT表返回META表所在Region位置信息
ROOT表的数据:
ROW COLUMN+CELL
.META.,,1 column=info:regioninfo, timestamp=1378110081278, value={NAME => '.META.,,1', STARTKEY => '', ENDKEY => '', ENCO
DED => 1028785192,}
.META.,,1 column=info:server, timestamp=1378349783451, value=cdh-1:60020
.META.,,1 column=info:serverstartcode, timestamp=1378349783451, value=1378349719946
.META.,,1 column=info:v, timestamp=1378110081278, value=\x00\x00
3.请求META表,META表返回User个所在Region位置信息
经过了上面的三个步骤,用户才真正的吧请求信息发送到了user table, 当然这还不算完,在客户端,是有缓存机制的,也就是说,用户首先按照上述的三个步骤访问本地缓存文件,如果没有,才去访问ZK,这样一折腾的话,就变成了六步了,哈哈淡定吧~
HBase 架构
先上个图,大家先看看,首先这个图,有一个地方错了,就是HLog所在位置,它应该在HRegionServer中,和Region并列,这张图将HLog放在了HRegion中了.
看完了这张图,来慢慢说这个架构吧. 首先Client去访问ZK, 得到了Region的位置,去访问RegionServer, 好吧进入到了Region内部了,我们从这里开始说.
1.RegionServer构成
一个Hlog + N个Region组成
2.HLog工作原理
Hlog就是大名鼎鼎的WAL(Write-ahead Log), 主要是作用于HBase的高可靠性, 当写的信息请求Region时,HBase先将请求内容记录到HLog中(HLog位于HDFS上,安全可靠,还有副本), 然后在存信息到Region中,这个过程下面说.因为hlog时sequence的,所以写的速度特别快,性能非常的高.
当RS宕机后,那么ZK会拿到这个HLog, 并拆分它,分别放到对应的Region中,在将Region指定到其他活的RegionServer中,RS发现由可用的hlog,会启动一个新的线程,处理log file.
由于写log的时,是在RS中写,要按Region来拆分,这样会影响效率.
3.Region
Region是由多个Store组成,每个Store对应一个column family, column family可以看作是一个集中的存储单元.
Store是由Mem Store和Store file组成的, MeM Store是内存数据,用户写数据时先写hlog,在写mem store,当mem store满了之后,在刷新到storefile.
StoreFile就是HFile,存储在HDFS上,Storefile会做如下操作
minorCompection,当有多个小的store file时,系统会进行压缩,这里只涉及到部分store file,不是全部,会将store file压缩成一个大的文件,但是不会删除冗余的列
majorCompection,执行更新和删除操作
当Storefile达到或超过一个阈值后,region会执行split操作,region和storefile拆成两个