浅谈HBase

来源:互联网 发布:socket指定任意端口 编辑:程序博客网 时间:2024/06/16 11:24

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 KeyTimestampColumn FamilyURIParserr1t3url=http://www.embracesource.comtitle=hellot2host=www.embracesource.com t1  r2t5url=http://www.embracesource.comcontent=工作t4host=www.embracesource.com 


Region

HBase存储的最小单元, region是由Region Server来管理的,每一个region可以分布在不同的region server上,当建立一张表的时候,默认会创建一个Region,但是当数据量大了,默认256M,系统就会split成多个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拆成两个




原创粉丝点击