HBASE是大数据系统的一个重要组件,是建立在HDFS之上的分布式、面向列的非关系型数据库。
在需要实时读写、随机访问超大规模数据时使用。
1. 大:一个表可以有上亿行,上百万列。
2. 面向列:面向列表(簇)的存储和权限控制,列(簇)独立检索。
3. 稀疏:对于为空(NULL)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
4. 无模式:每一行都有一个可以排序的主键和任意多的列,列可以根据需要动态增加,同一张表中不同的行可以有截然不同的列。
5. 数据多版本:每个单元中的数据可以有多个版本,默认情况下,版本号自动分配,版本号就是单元格插入时的时间戳。
6. 数据类型单一:HBase中的数据都是字符串,没有类型。
HBase 以表的形式存储数据。表由行(ROW)和列(COLUMN)组成。如下所示
Row Key:用来检索的主键
在存储时,数据按照* Row Key 的字典序(byte order)排序存储*。设计 Key 时,要充分排序存储这个特性,将经常一起读取的行存储到一起(位置相关性)。
COLUMN family(列族)
HBase 表中的每个列都归属于某个列族。列族是表的模式的一部分(而列不是),必须在使用表之前定义。列名都以列族作为前缀。
一般我们项目的建表语句是:
create ‘testtable’,’inf’ (create ‘表名’,’列族’)
所以我们项目的列族只有inf。
COLUMN(列):字段
根据表名+主键+列名(字段),查出对应的值
Timestamp:时间戳
HBase 中通过 Row 和 Columns 确定的一个存储单元称为 Cell。每个 Cell 都保存着同一份数据的多个版本。
版本通过时间戳来索引,时间戳的类型是 64 位整型。时间戳可以由HBase(在数据写入时自动)赋值, 此时时间戳是精确到毫秒的当前系统时间
所以从测试离线任务来说,每次执行完可以根据时间戳的改变来确定脚本执行成功后HBASE数据是否更新。
HBase Shell 提供了大多数的 HBase 命令, 通过 HBase Shell 用户可以方便地创建、删除及修改表, 还可以向表中添加数据、列出表中的相关信息等。
下边分组举例 Shell 的各种操作。
general操作
查询 HBase 服务器状态 status
查询hbase版本 version
ddl操作
1、 创建一个表
create ‘table1’, ‘tab1_id’, ‘tab1_add’, ‘tab1_info’
2、 列出所有的表
list
3、 获得表的描述
describe “table1”
4、 修改表结构 disable alter enable 注意修改前,需要先把表disable
disable ‘table1’
alter ‘table1’, {NAME=>’tab1_add’, METHOD=>’delete’}
enable ‘table1’
5、 查看表是否存在
exists ‘table2’
6、 判断表是否为‘enable’
is_enabled ‘table1’
7、 删除一个表
disable ‘table1’
drop ‘table1’
dml操作
1、 插入数据
put ‘member’, ‘scutshuxue’, ‘info:age’, ‘24’
put ‘member’, ‘scutshuxue’, ‘info:birthday’, ‘1987-06-17’
put ‘member’, ‘scutshuxue’, ‘info:company’, ‘alibaba’
put ‘member’, ‘scutshuxue’, ‘address:contry’, ‘china’
put ‘member’, ‘scutshuxue’, ‘address:province’, ‘zhejiang’
put ‘member’, ‘scutshuxue’, ‘address:city’, ‘hangzhou’
put命令比较简单,只有这一种用法:
hbase> put ‘t1′, ‘r1′, ‘c1′, ‘value’, ts1
t1指表名,r1指行键名,c1指列名,value指单元格值。ts1指时间戳,一般都省略掉了。
2、 全表扫描 scan
3、 获得数据 get
1) 获得一行的所有数据
2) 获得某行,某列的所有数据
4、 更新一条记录 put
5、 删除 delete、 deleteall
1) 删除行’scutshuxue’, 列族为‘info’ 中age的值
delete ‘member’, ‘scutshuxue’, ‘info:age’
2) 删除整行
deleteall ‘member’, ‘scutshuxue’
6、 查询表中有多少行
count ‘member’
7、 将整个表清空
truncate ‘member’
或者是通过先对表执行 disable,然后再执行 drop 操作后重建表来实现 truncate 的功能的。
Client:提交hbase的读写请求,维护客户端缓存,加快HBASE的访问
Zookeeper:
(1) 保证集群任何时候只有一台工作的master
(2) 存储所有region的入口信息(所有region的元数据放在那台regionserver上)
(3) 实时监控regionserver的上线下线,并通知master
(4) 存储hbase table元数据
Master:
(1) 为regionserver分配region
(2) 对失效的regionserveer重新分配其上的region
(3) 负责regionserver的负载均衡
(4) 管理用户对table的增删改查操作
Regionserver:
Hbase集群的从节点
(1) 负责处理client的读写请求,负责存储region
(2) 当一个region辩得过大时,region负责等分为两个
Region:
table在行的方向上分隔为多个Region。Region是HBase中分布式存储和负载均衡的最小单元,即不同的region可以分别在不同的Region Server上,但同一个Region是不会拆分到多个server上。
Region按大小分隔,每个表一般是只有一个region。
随着数据不断插入表,region不断增大,当region的某个列族达到一个阈值(默认256M)时就会分成两个新的region。
上一篇: yum安装报错解决
下一篇: 软件测试之手工测试人员如何转测试开发?