hbase

hbase原理及一般使用

1.Hbase概述

1.HBase设计模型

MacDown Screenshot

HBase中的每一张表就是所谓的BigTable。BigTable会存储一系列的行记录,行记录有三个基本类型的定义:

a.RowKey:是行在BigTable中的唯一标识。

b.TimeStamp:是每一次数据操作对应关联的时间戳,可以看作SVN的版本。

c.Column:定义为<family>:<label>,通过这两部分可以指定唯一的数据的存储列,family的定义和修改需要对HBase进行类似于DB的DDL操作;而label,不需要定义直接可以使用,这也为动态定制列提供了一种手段。family另一个作用体现在物理存储优化读写操作上,同family的数据物理上保存的会比较接近,因此在业务设计的过程中可以利用这个特性。
2.HBase原理图

MacDown Screenshot

HBase中的每张表都通过行键(rowkey)按照一定的范围被分割成多个子表(HRegion),默认一个HRegion超过256M就要被分割成两个,这个过程由HRegionServer管理,而HRegion的分配由HMaster管理。

1.HMaster:

为Region server分配region;
负责Region server的负载均衡;
发现失效的Region server并重新分配其上的region;
处理schema更新请求。

2.HRegionServer

维护master分配给他的region,处理对这些region的io请求。
负责切分正在运行过程中变的过大的region。

3.HRegion

table在行的方向上分隔为多个Region。Region是HBase中分布式存储和负载均衡的最小单元
Region按大小分隔,每个表一般是只有一个region。当region的某个列族达到一个阈值(一般256M)时就会分成两个新的region。
每个region由以下信息标识:< 表名,startRowkey,创建时间>
由目录表(-ROOT-和.META.)记录该region的endRowkey

4.Store

每一个region由一个或多个store组成,至少是一个store
hbase会把一起访问的数据放在一个store里面,即为每个 ColumnFamily建一个store
一个Store由一个memStore和0或者多个StoreFile组成。HBase以store的大小来判断是否需要切分region

5.MemStore

memStore是放在内存里的。保存修改的数据即keyValues。当memStore的大小达到一个阀值(默认128MB)时,memStore会被flush到文件,即生成一个快照。

6.StoreFile

memStore内存中的数据写到文件后就是StoreFile,StoreFile底层是以HFile的格式保存。

7.HFile

HBase中KeyValue数据的存储格式,HFile是Hadoop的二进制格式文件,实际上StoreFile就是对Hfile做了轻量级包装,即StoreFile底层就是HFile

2.Hbase常用命令

1.建表

语法:create <table>, {NAME => <family>, VERSIONS => <VERSIONS>}
例如:创建表t1,有两个family name:f1,f2,且版本数均为2
hbase(main)> create 't1',{NAME => 'f1', VERSIONS => 2},{NAME => 'f2', VERSIONS => 2}

2.添加数据

语法:put <table>,<rowkey>,<family:column>,<value>,<timestamp>
例如:给表t1的添加一行记录:rowkey是rowkey001,family name:f1,column name:col1,value:value01,timestamp:系统默认
hbase(main)> put 't1','rowkey001','f1:col1','value01'

3.查询数据

语法:get <table>,<rowkey>,[<family:column>,....]
例如:查询表t1,rowkey001中的f1下的col1的值
hbase(main)> get 't1','rowkey001', 'f1:col1'

4.删除数据

语法:delete <table>, <rowkey>,  <family:column> , <timestamp>,必须指定列名
例如:删除表t1,rowkey001中的f1:col1的数据
hbase(main)> delete 't1','rowkey001','f1:col1'

参考:https://www.cnblogs.com/steven-note/p/7209398.html

https://www.jianshu.com/p/20aff7d85e95

http://www.cnblogs.com/nexiyi/p/hbase_shell.html