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`;

 

posted @ 2021-11-05 11:03  少郎  阅读(366)  评论(0编辑  收藏  举报