hbase简单介绍

一、 概念

hbase是高可靠、面向列的、可伸缩的、分布式的数据库,适用于非结构化的数据存储数据库;

运行在hadoop之上,受zookeeper管理。

 

二、数据模型

 

Row Key

Timestamp

Column Family


URI

Parser



r1

t3

url=http://

title=

t2

host=com



t1




r2

t5

url=http://

content=每天…

t4

host=com



 

Row key:行键,Table的主键,Table中的记录默认按照Row Key的字典序升序排序;

最大不超过64k,一般越短越好。

 

Timestamp:时间戳,每次数据操作对应的时间戳,可以看作是数据的version number;

 

Column Family:列簇,Table在水平方向有一个或者多个Column Family组成,一个Column Family中可以由任意多个Column组成,即Column Family支持动态扩展,无需预先定义Column的数量以及类型,所有Column均以二进制格式存储,用户需要自行进行类型转换。

但是,目前hbase对列簇超过2-3列支持不是太好,所以设计中最多不超过3列。列簇越少越好,设计表时预习设计好一个列簇。

 

 Region:当Table随着记录数不断增加而变大后,会逐渐分裂成多份splits,成为regions,一个region由[startkey,endkey)表示,不同的region会被Master分配给相应RegionServer进行管理。Region相当于文件系统中划分的block块。

 

三、系统架构



 

HBase 库表最多支持多少列 hbase最大column数_HBase 库表最多支持多少列

Client:客户端与HMaster通信负责管理hbase的regionServer服务运行、数据迁移、资源划分。直接与regionServer通信负责数据的读写。

HRegionServer:主要负责响应用户I/O请求,向HDFS文件系统中读写数据,供region运行的服务器;内部管理了一系列HRegion对象。

HRegion:对应table中的一个region,一个table可以拆分为多个region.

HStore:包含两个部分,一个是MemStore,读写数据的内存缓冲区,当MemStore满值后会将内容向storeFile写入。storeFile基于HFile实现,是hdfs的二进制存储文件。当storeFile到了一定的阈值后会触发文件的合并。合并的过程中对列的版本数据进行合并和更新,合并包括大文件合并和小文件合并,控制好合并的minor和major阈值对性能提升很重要。当storefile合并大小到达一定阈值会触发split将region拆分。Hlog文件是在向MemStore写文件的同时要写入,避免宕机情况出现导致memstore中的数据丢失。

四、Mapreduce支持

 

HBase 库表最多支持多少列 hbase最大column数_hbase_02

 

Mepreduce不仅支持从hdfs中读写数据,还支持向hbase中读写数据。Mapreduce从hbase读写数据时Map端业务逻辑类不再继承Mapper,而是继承TableMapper;reduce端继承TableReduce;相关Job类中mapper和reduce的设置方式也有改变。

 

Map端从hbase的table中的各个region读数据,根据不同的key将读取的数据划分到各个分组中,然后分组数据向reduce端混排合并,合并后相同的key交给同一个reduce处理,然后将处理结果输出到hbase而不是hdfs中。