HBase的体系结构逻辑结构
表(table)
划分数据集合的概念,和传统的db中的表的概念是一样的。
行健(RowKey):
一行数据的唯一标示,要想操作(read/write)一条数据,必须通过行健,其在hbase底层都是使用字节数组进行存放,所以方便我们使用rk进行排序,
行键是字节数组, 任何字符串都可以作为行键;表中的行根据行键进行排序,数据按照Row key的字节序(byte order)排序存储;所有对表的访问都要通过行键 (单个RowKey访问,或RowKey范围访问,或全表扫描)。
列族(columnFamily)
简单的认为是一系列“列”的集合。列族是以单独的文件进行存储。
列限定符(column Qualifier)
或者叫列。列里面的数据定位通过列限定符 每个CF可以有一个或多个列成员(ColumnQualifier),
列成员不需要在表定义时给出,新的列族成员可以随后按需、动态加入。时间戳(version)
在单元格中可以存放多个版本的数据。
单元格(cell)
Cell 由行键,列族:限定符,时间戳唯一决定,Cell中的数据是没有类型的,全部以字节码形式存贮,主要用来存储数据。
物理结构
HMaster ----->NameNode
管理节点
HRegionServer----->DataNode
存放Region的服务器
HRegion
存放hbase中数据的一个概念,可以简单的理解为表,存放一张表中的一部分数据,当该region中的数据超过一定量的时候,会自动进行分裂,
分裂成两个region(一份为二),从这个角度上而言,Region是对hbase中表的一个横向的划分。
HFile
在hdfs上存放数据之前的一个物理结构,用于接收从客户端提交过来的数据。
-------------------------------------------------------------------------
HBase的操作:
CLI(Command Line interface):
使用bin/hbase shell来进入命令终端
命令:
list查看当前命名空间下的所有的表,也可以查看特定命名空间下的表
list 'ns:abc.*' --->查看命名空间ns下面的所有的以表名以abc开头的表的列表
创建一张表
create 't1', 'cf1' --->在默认的命名空间下创建一张表名为t1,只有一个列族,列族名为cf1
查看一张表的所有内容:scan
scan 't1'或者scan 'ns1:t1'
往表中增加一条记录:put
put 't1', '1'(rowkey), 'cf1:name', 'zhangsan'
查看其中一个具体的值
get 't1', '1', 'cf1:name'
查看表的属性信息:
describe/desc 't1'
删除记录:delete
delete 't1', '1', 'cf1:age' -->删除某一个rowkey对应的cf1:age对应的单元格
deleteall 't1', '2' -->删除rowkey=2对应的所有的单元格
删除一张表:
注意:删除表之前,需要先确认表状态是否为disable,如果不是,需要disable '表名'
disable 't1'
drop 't1'
练习:
rk column column cf
name grad course
math art |column
1 Tom 5 97 87
2 Jim 4 89 80
创建表
create 'stu','name', 'grad','course' --->创建了表stu,有三个列族,name、grad、course
增加数据:
put 'stu', '1', ':name', 'Tom'
put 'stu', '1', ':grad', '5'
put 'stu', '1', 'course:art', '97'
put 'stu', '1', 'course:math', '88'
删除name="Jim"的art成绩
delete 'stu', '2', 'name', 'Jim', "course:art" --->错误的
delete 'stu', '2',"course:art" 因为每次操作,只能操作的是单一单元格,hbase的原子性操作是基于单元格的
而一个单元格的确定是由rk、cf、col、ts
删除name="JIM"所在的行的而所有单元格
deleteall 'stu', '2'
查看当前表有多少条记录:select count(1) from t;
count