当前位置: 首页> 技术文章> HBASE知识分享

HBASE知识分享

HBASE是大数据系统的一个重要组件,是建立在HDFS之上的分布式、面向列的非关系型数据库。

在需要实时读写、随机访问超大规模数据时使用。

HBase的特点

1.        大:一个表可以有上亿行,上百万列。

2.        面向列:面向列表(簇)的存储和权限控制,列(簇)独立检索

3.        稀疏:对于为空(NULL)的列,并不占用存储空间,因此,表可以设计的非常稀疏。

4.        无模式:每一行都有一个可以排序的主键和任意多的列,列可以根据需要动态增加,同一张表中不同的行可以有截然不同的列。

5.        数据多版本:每个单元中的数据可以有多个版本,默认情况下,版本号自动分配,版本号就是单元格插入时的时间戳

6.        数据类型单一:HBase中的数据都是字符串,没有类型。

 

HBase数据模型

HBase 以表的形式存储数据。表由行(ROW)和列(COLUMN)组成。如下所示

upfile1607657458563.png

upfile1607657518944.png

 

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 Shell 提供了大多数的 HBase 命令, 通过 HBase Shell 用户可以方便地创建、删除及修改表, 还可以向表中添加数据、列出表中的相关信息等。

下边分组举例 Shell 的各种操作。

general操作

查询 HBase 服务器状态 status

查询hbase版本 version

upfile1607657489500.png

ddl操作

1 创建一个表

create ‘table1’, ‘tab1_id’, ‘tab1_add’, ‘tab1_info’

upfile1607657520608.png

upfile1607657522986.png

2 列出所有的表

list

3 获得表的描述

describe “table1”

upfile1607657519899.png

4 修改表结构 disable alter enable 注意修改前,需要先把表disable

disable ‘table1’

alter ‘table1’, {NAME=>’tab1_add’, METHOD=>’delete’}

enable ‘table1’

upfile1607657520584.png

 

5 查看表是否存在

exists ‘table2’

6 判断表是否为‘enable

is_enabled ‘table1’

upfile1607657521004.png

upfile1607657530772.png

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

upfile1607657540753.png

3 获得数据 get

1) 获得一行的所有数据

upfile1607657554233.png

2) 获得某行,某列的所有数据

upfile1607657554285.png

4 更新一条记录 put

upfile1607657560976.png

 

5 删除 delete deleteall

1) 删除行’scutshuxue, 列族为‘info age的值

delete ‘member’, ‘scutshuxue’, ‘info:age’

2) 删除整行

deleteall ‘member’, ‘scutshuxue’

6 查询表中有多少行

count ‘member’

upfile1607657565730.png

7 将整个表清空

truncate ‘member’

或者是通过先对表执行 disable,然后再执行 drop 操作后重建表来实现 truncate 的功能的。

 

 

HBASE的架构

upfile1607657574069.png

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在行的方向上分隔为多个RegionRegionHBase中分布式存储和负载均衡的最小单元,即不同的region可以分别在不同的Region Server上,但同一个Region是不会拆分到多个server上。

Region按大小分隔,每个表一般是只有一个region

随着数据不断插入表,region不断增大,当region的某个列族达到一个阈值(默认256M)时就会分成两个新的region

 


上一篇: yum安装报错解决

下一篇: 软件测试之手工测试人员如何转测试开发?

QQ技术交流群

多测师官方学习交流
556733550

加入群聊