07 HBase操作
1.理解HBase表模型及四维坐标:行键、列族、列限定符和时间戳。
表:HBase采用表来组织数据,表由行和列组成,列划分为若干个列族。
行:每个HBase表都由若干行组成,每个行由行键(row key)来标识。
列族:一个HBase表被分组成许多“列族”(Column Family)的集合,它是基本的访问控制单元。
列限定符:列族里的数据通过列限定符(或列)来定位。
单元格:在HBase表中,通过行、列族和列限定符确定一个“单元格”(cell),单元格中存储的数据没有数据类型,总被视为字节数组byte[]。
时间戳:每个单元格都保存着同一份数据的多个版本,这些版本采用时间戳进行索引。
2.启动HDFS,启动HBase,进入HBaseShell命令行。
start-dfs.sh start-hbase.sh jps
hbase shell
3.列出HBase中所有的表信息list
list
4.创建表create
create:创建表,至少包含一个一列族
创建一个表,该表名称为stuInfo,包含两个列族student和score, 行键是学号, 结构如下:
学生 | 分数 | |||
学号 | 姓名 | 性别 | 大数据 | 操作系统 |
073 | 刘文 | 男 | 80 | 50 |
075 | 大熙 | 男 | 90 | 59 |
create 'stuInfo','student','score'
5.查看表详情desc
desc 'stuInfo'
6.插入数据put
put 'stuInfo','073','student:name','刘文' put 'stuInfo','073','student:sex','男' put 'stuInfo','073','score:bigData','80' put 'stuInfo','073','score:operatingSystem','50' put 'stuInfo','075','student:name','大熙' put 'stuInfo','075','student:sex','男' put 'stuInfo','075','score:bigData','70' put 'stuInfo','075','score:operatingSystem','59'
7.查看表数据scan (输入中文无法显示,会被转义,所以nam的值就没有出来)
8.多版本实验:修改列族版本数,插入多版本数据,查看多版本数据
1) 在shell端创建一个Hbase表
create 't1','f1'
2) 查看表结构
desc 't1'
表结构如下
从上面的表结构中,我们可以看到,VERSIONS为1,也就是说,默认情况只会存取一个版本的列数据,当再次插入的时候,后面的值会覆盖前面的值。
3) 修改表结构,让Hbase表支持存储3个VERSIONS的版本列数据
alter 't1',{NAME=>'f1',VERSIONS=>3}
修改后,shell终端显示如下:
再次查看表结构:
我们会发现VERSIONS已经修改成了3
4) 插入3行数据
put 't1','rowkey1','f1:name','chhliu' put 't1','rowkey1','f1:name','xyh123' put 't1','rowkey1','f1:name','chhliuxyh' get 't1','rowkey1','f1:name'
5) 从上面可以看出,插入了3行数据到表中,并且3行数据的rowkey一致,然后使用get命令来获取这一行数据,发现只返回了最新的一行数据。
获取多行数据方法
get 't1','rowkey1',{COLUMN=>'f1:name',VERSIONS=>3}
9.对比HBase列式表与MySQL的行式表
- 在HBase中创建学生课程分数表student并查看表结构。create,describe
- 在mysql中创建学生表student, 课程表 course, 分数表score并查看表结构。
- 分别插入几行数据,几个版本。put/insert
- 查看数据及版本。get,scan/select
在hbase中创建表
create 'stuInfo','student','score'
在MySQL中创建表
CREATE DATABASE; USE `stu`; DROP TABLE IF EXISTS `stu2`; CREATE TABLE `student` ( `id` int(4) NOT NULL, `stu_id` int(4) NOT NULL, `course` varchar(20) NOT NULL, `score` int(3) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;student
在hbase中插入数据
put 'stuInfo','073','student:name','刘文' put 'stuInfo','073','student:sex','男' put 'stuInfo','073','score:bigData','80' put 'stuInfo','073','score:operatingSystem','50'
在mysql中插入数据
insert into `student`(`id`,`stu_id`,`course`,`score`) values (2,20170102,'数据库',80),(3,20170103,'数据库',82),(4,20170104,'数据库',67),(5,20170105,'数据库',90),(6,20170102,'C语言',87),(7,20170102,'C语言',80),(8,20170103,'C语言',75),(9,20170104,'C语言',67),(10,20170105,'C语言',92);
在hbase中和MySQL中查询数据区别
get 'stuInfo','075',{COLUMN=>'student:name',VERSIONS=>1}
scan 'stuInfo' select * from `stu`;