HBase简介
HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统
HBase底层利用Hadoop HDFS作为其文件存储系统,用Hadoop的 MapReduce来处理HBase中的大量数据
HBase框架结构
Client
客户端进行HBase shell、java API、RestAPI操作
zookeeper
zookeeper是HMaster的高可用集群的解决方案,保证同一时间,只有一个HMaster在运行,如果这个HMaster异常或者
HMaster异常或死亡,则通过竞争机制产生新的HMaster。同时zookeeper还监控着HRegionServer的状态,当HRegionServer异常时,HMaster会通过zookeeper就到HRegionServer上下线的状态。存储了-ROOT-表的地址和HMaster的地址,即作为元数据入口地址。
HMaster
HMaster在功能上主要负责Region的管理工作:
1、故障转移:当某个HRegionServer异常或死亡时,讲HRegion转移到其他HRegionServer上执行
2、在HRegin足够大时,HRegion会产生分裂,此时HMaster会分配新HRegion
3、管理用户对元数据的增、删、改、查操作
4、数据负载均衡:空闲时在HRegionServer之间迁移HRegion,调整HRegion分布
5、发送自己的位置给Cllient(通过zookeeper实现)
HRegionServer
1、处理分配的HRegion
2、刷新Cache到HDFS
3、维护HLog(容错)
4、处理来自用户的读写请求
5、处理HRegion变大之后的拆分
6、负责StoreFile的合并工作
HRegionServer内部管理了一系列HRegion对象,每个HRegion对应了Table中的一个Region,HRegion中由多个HStore组成。每个HStore对应了Table中的一个Column Family(列族)的存储,可以看出每个Column Family其实就是一个集中的存储单元,因此最好将具备共同IO特性的column放在一个Column Family中,这样最高效
HRegin
数据表的横向切分
HBase每个表都会根据rowkey值被切分成不同的HRegion分散存储在HRegionServer中
如图:
Store
一个Region对应多个Store
一个Store就代表数据表中的一个列族
MenStore
内存数据的读写操作的具体实现
StoreFile
相当于数据表的某一个单列
HFlie
磁盘上保存原始数据的实际的物理文件
StoreFile是以HFile的形式存储在HDFS中的
HBase数据结构
rowkey
主键(最大64kb,实际使用10~100bytes)
数据根据rowkey排序
HRegion大小达到一定值时,裂变
HBase Table中访问的行的方式:
1、通过单个rowkey访问get ‘table_name’ ‘col_family_name’
2、通过rowkey的range(正则)访问
3、全表扫描scan
columnfamily
1、列族在物理存储上对应于HDFS的一个目录
2、HBase表中的每个列,都属于某一个列族
3、列族是表的schema的一部分(列不是),必须在使用表之前定义列族
4、列名都是以列族作为前缀
5、每一个列族对应一个store,类似于hive的分区操作一样,HBase相当于按列族进行了分区
columnqualifier
单列,列族下具体的某一列,一个列族可以有很多个单列
Cell
1、由{rowkey,columnfamily,version}唯一确定的单元
2、类似于excel里的一个单元格,数据以字节存储,没有类型
TimeStamp
1、每个cell中保存着一份数据的多个版本,由精确到毫秒的64位整数存储,可以由HBase写入时自动生成也可以用户指定
2、若用户指定,为了避免冲突,一定要用单cell中不重复的时间戳
3、单元格中的数据以时间戳倒序排列
4、为避免cell数据过大,HBase提供两种机制:保留最新的N条数据或者保留截至当下多长时间的数据
HBase操作
hbase shell
:进入操作窗口
ctrl+backspace
:删除内容
version
:查看版本
status
:查看状态
whoami
:查看当前用户
list_namespace
:查看命名空间
create_namespace
:新建命名空间
describe_namespace
:命名空间详情
list
:查看所有表
list_namespace_table
:查看具体表
create 'namespace:table_name',{NAME=>'col1',VERSION=>'value1'},{NAME=>'col2'}
:建表
desc
:查看表定义
scan
:查看表数据
delete
:删表数据(具体数据)
deleteall
:删表数据(单条)
is_disabled
:查看禁用表状态
disable
:禁用表
enable
:启用表
drop
:删表(禁用表之后才能删表)
exists
:查看表是否存在
get
:查看表数据
put
:修改表数据/增加表数据
param=get_table
:定义变量(可使用变量调用数据增删改查,启禁表)