07 HBase操作
1.理解HBase表模型及四维坐标:行键、列族、列限定符和时间戳。
行键(rokey):rowkey是用来检索记录的主键。访问HBase Table中的行,只有三种方式:
1)通过单个row key访问
2)通过row key的range
3)全表扫描
rowkey 行键可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),最好是16。在 HBase内部,rowkey保存为字节数组。HBase 会对表中的数据按照 rowkey 排序 (字典顺序)存储时,数据按照 rowkey 的字典序(byte order)排序存储。设计 key 时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)
列族(Column Family):HBase 表中的每个列,都归属与某个列簇。列簇是表的Schema的一部分(而列不是),必须在使用表之前定义好,而且定义好了之后就不能更改。
列名都以列簇作为前缀。例如courses:history,courses:math都属于courses这个列簇。
访问控制、磁盘和内存的使用统计等都是在列簇层面进行的。列簇越多,在取一行数据时所要参与IO、搜寻的文件就越多,所以,如果没有必要,不要设置太多的列簇(最好就一个列簇)
列限定符(Column Qualifier):列限定符,可以理解为是具体的列名,例如 courses:history
,courses:math
都属于 courses
这个列族,它们的列限定符分别是 history
和 math
。需要注意的是列限定符不是表 Schema 的一部分,你可以在插入数据的过程中动态创建列。
时间戳(TimeStamp):HBase 中通过 rowkey 和 columns 确定的为一个存储单元称为 cell。
每个cell 都保存着同一份数据的多个版本,版本通过时间戳来索引。时间戳的类型是 64 位整型。时间戳可以由hbase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。 每个cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。
为了避免数据存在过多版本造成的管理 (包括存贮和索引)负担,hbase提供了两种数据版本回收方式: 保存数据的最后 n 个版本 保存最近一段时间内的版本(设置数据的生命周期 TTL)。用户可以针对每个列簇进行设置。
2.启动HDFS,启动HBase,进入HBaseShell命令行。
启动HDFS、启动HBase:
进入HBaseShell命令行:
3.列出HBase中所有的表信息list
4.创建表create
5.查看表详情desc
6.插入数据put
7.查看表数据scan,get
scan:
get:
8.多版本实验:修改列族版本数,插入多版本数据,查看多版本数据
1)创建查看
2)修改查看
3)插入数据
4)查看多个版本的数据
9.对比HBase列式表与MySQL的行式表
- 在HBase中创建学生课程分数表student并查看表结构。create,describe,put
- 在mysql中创建学生表student, 课程表 course, 分数表score并查看表结构。create,describe
- 分别插入几行数据,几个版本。put/insert
- 查看数据及版本。get,scan/select
|
message |
score |
||||||
name |
age |
sex |
OS |
BD |
||||
row1 |
…3624 |
xianming |
…3447 |
19 |
85 |
90 |
||
row2 |
…6395 …7611 |
19 22 |
||||||
row3 |
…4968 |
femal |
|
message | score | ||||
name | age | sex | Big data | OS | |
001 | Peter | 20 | man | 80 | 50 |
HBase:
1.创建一个学生表(create)。
2.插入信息(put)。
3.查看表结构(describe)。
4.查看表(scan)。
MySQL:
学生表(student):
查看学生表(select):
课程表(course):
查看课程表(select):
分数表(score):
查看分数表(select):