HBase起源
2006年Google发布了一篇叫做BigTable:A Distributed Storage System for Structured Data的论文。BigTable是一个分布式存储系统,利用谷歌提出的MapReduce分布式并行计算模型来处理海量数据,使用谷歌分布式文件系统GFS作为底层数据存储,并采用Chubby提供协同服务管理,可以扩展到PB级别的数据和上千台机器,
特点:具备可扩展性、高性能和高可用性
存储结构
HBase采用key-value的形式存储数据,最基本的存储单位是列(column)一个列或者多个列形成一行(row),若干行又组成了一张表(table)。
每行中的若干个列又可以被归类为一个列族(column family)。创建表的时候不需要指定列,但是需要指定列族。HBase中的列是很灵活的,可以在插入数据的时候再去添加
如果插入数据的时候使用了以前已经存在的row key,那就会把之前的列值给更新掉。更新的时候,之前的值不会被覆盖,而是把新值也放到这个单元格中。
集群架构
一般HBase集群有一个HMaster服务器和几个HRegionServer服务器。HMaster服务器负责维护表的结构信息,HRegionServer服务器负责存储数据
Store由两部分构成,一部分是MemStore,一部分是StoreFile。MemStore是内存缓冲区,StoreFile是HDFS上的文件。通常当MemStore的大小达到128M或者占用内存达到总内存的40%时会触发flush操作。
随着flush操作的执行,会产生越来越多的StoreFile文件。当StoreFile文件数量增长到3个后,会触发合并操作,将多个小的StoreFile合并成一个大的StoreFile。
StoreFile在完成Compact操作后,体积会越来越大。当单个StoreFile的大小超过10G后,会触发分裂操作,把当前Region分裂成2个Region。
为了保证恢复的效率,HBase会限制HLog记录的日志数量,如果数量达到32的时候,就会触发强制flush操作。
HDFS组件
Hbase是由Client、Zookeeper、HMaster、HRegionServer和HDFS等几个组件组成
Client:包含了访问HBase的接口,还有维护缓存加速HBase的访问。
Zookeeper:实现HMaster的高可用;监控HRegionServer的状态;存储.META.的地址。
HMaster:维护.META.;为HRegionServer分配Region;维护集群的负载均衡。
HRegionServer:处理客户端的读写请求;管理HMaster分配的Region。
HDSF:为HBase提供最终的底层数据存储服务。
启动节点
start-all.sh 开启节点
stop-all.sh 关闭节点
start-hbase.sh 开启hbase节点
stop-hbase.sh 关闭hbase节点
基础
Shell操作的第一步是启动Shell,使用以下命令
hbase shell
要离开可以输入exit或者quit命令
exit;
使用create命令创建表
create 'user', 'cf1'
这句话的意思是建立一个叫user的表,里边有一个叫做cf1的列族
使用list命令查看有哪些表
在HBase Shell执行以下命令:
list
输出结果:
TABLE
user
1 row(s)
Took 0.0890 seconds
=> ["user"]
说明我们的HBase中只有user一张表
使用describe命令来查看表属性
在HBase Shell执行以下命令:
describe 'user'
使用put命令来插入数据
在HBase Shell执行以下命令:
put 'user', 'rk0001', 'cf1:name', 'zhangsan'
这句话的意思就是
向user表插入一个单元格
这个单元格的row key为rk0001
这个单元格的列族是cf1
这个单元格的列名是name
这个单元格的数据值是zhangsan
使用scan来查看表数据
scan 'user' 查看user表里的内容
使用delete来删除单元格数据
delete 'user', 'rk0002', 'cf1:age'
执行的结果就是user表中rk0002行的cf1:age单元格被删除了。
使用deleteall删除整行记录
deleteall 'user', 'rk0001'
这次一下就删除了整个rk0001记录。
使用disable来停用表
disable 'user'
停用user表
drop 'user'
需要停用表之后才能删除表