Hbase是什么
Hbase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
Hbase主要概念
RowKey :行键,是每个记录的“主键”
Column Family :列族,Column:列
列族中包含了多个列的信息,例如:col1:name,col1:sex等
Version Number :控制版本数量
Hbase数据模型

上图的示例中展示了一个转换后的Hbase的数据库存储的数据模型,行键标识了一行,不同的时间戳下存在多个版本的数据,且当前列族分为三个:contents、anchor、mime三个列族,其中anchor列族中存在两个列:cnnsi.com和my.lock.ca
Hbase架构设计

Client
client主要为用户提供使用Hbase的接口
HMaster
Hbase集群的主节点
为RegionServer分配Region
负责RegionServer的负载均衡
管理用户对表结构的操作
负责发现失效的RegionServer并且重新分配其上面的Region
HRegionServer
管理Region信息,处理操作Region的IO请求
负责切分过大的Region
Zookeeper
维护-ROOT-表的地址
负责维护HMaster热切换避免单点故障
监控HRegionServer的上线和下线的信息
Hbase查询数据过程

1. 访问ZooKeeper查找-ROOT-表的地址
2. 根据该表存在的地址,查询-ROOT-表,该表中存储着.META.表的映射地址
3. 根据.META.表的映射地址找到.META.表中对应的Region的地址和RegionServer的地址
4. 根据Region的地址访问想要的数据
5. 上述的过程为基本流程,但是Hbase对其进行了优化,在客户端进行缓存Region的地址信息,这样,当多次操作同一个Region的数据时就不需要从头开始寻址了,当然,为了能及时的发现地址的变更,缓存的地址信息会在一定的时间后失效。如果再次获取该Region的数据,那么需要经历以上的几次过程。
Hbase Web端访问
通过60010端口进行访问
http://hostname:60010

Hbase Shell客户端访问
这里简单写一些常用的,后面主键丰富
Hbase运行状态
hbase(main):036:0> status
1 servers, 0 dead, 3.0000 average load1212
创建表
hbase(main):038:0* create 'siti', 'stu'
0 row(s) in 1.0320 seconds
=> Hbase::Table - siti
1234512345
列出表
hbase(main):041:0> list 'siti'
TABLE
siti
1 row(s) in 0.0380 seconds
=> ["siti"]12345671234567
插入数据
hbase(main):044:0> put 'siti', '20110101','stu:name', 'wy'
0 row(s) in 0.0160 seconds1212
查看数据
hbase(main):046:0* scan 'siti'
ROW COLUMN+CELL
20110101 column=stu:name, timestamp=1481005159984, value=wy
1 row(s) in 0.0130 seconds
1234512345
插入性别
hbase(main):048:0* put 'siti', '20110101', 'stu:sex', 'M'
0 row(s) in 0.0090 seconds1212
查看该行数据
hbase(main):054:0* get 'siti', '20110101'
COLUMN CELL
stu:name timestamp=1481005159984, value=wy
stu:sex timestamp=1481005286497, value=M
2 row(s) in 0.0130 seconds1234512345
删除列
hbase(main):056:0* delete 'siti', '20110101', 'stu:sex'
0 row(s) in 0.2440 seconds1212
根据列筛选
hbase(main):059:0> scan 'siti',{COLUMNS=>'stu:name'}
ROW COLUMN+CELL
20110101 column=stu:name, timestamp=1481005159984, value=wy
1 row(s) in 0.0300 seconds12341234
多种条件进行查询
hbase(main):062:0> scan 'siti',{COLUMNS=>'stu:name', VERSIONS=>10, TIMERANGE=>[1481005159981, 1481005159989]}ROW COLUMN+CELL
20110101 column=stu:name, timestamp=1481005159984, value=wy
1 row(s) in 0.0160 seconds1234
