HBase的数据模型: HBase本质上其实就是Key-Value的数据库.
HBase中是有表的概念的
一个表中可以包含多个列族
一个列族可以包含很多的列
每一个列对应的单元格(值、timestamp)
HBase介于nosql(非关系型数据库)和RDBMS(关系型数据库管理系统)之间,仅能通过主键(row key)和主键的range来检索数据,
仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。主要用来存储非结构化和半结构化的松散数据。
RowKey(行键):
Rowkey相当于SQL中的主键。rowkey决定了row在表中的存储顺序,在HBase中,row的排序方式为字典顺序。
HBase中的三种查询方式:
1、基于Rowkey的单行查询
2、基于Rowkey的范围扫描
3、全表扫描 Row key行键
(Rowkey)可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),在Hbase内部,rowkey保存为字节数组。
Column(列):
可以理解为其MySql中的列。基本的存储单位,一个或者多个列形成列族。 ColumnFamily(列族)
列族是我们在开始创建表的时候就需要定义的,它是表的一部分。 表中的有些属性也是在列族上定义的,比如过期时间、数据块缓存以及是否压缩等。
Cell(单元格):
{rowkey:column family:column:version}
一个列上可以存储多个版本的值,多个版本的值存储在多个单元格里面,多个版本之间通过版本号(Version)来区分
Time Stamp(时间戳)
时间戳就是实现多版本的关键所在。通过不同的timestamp来标识相同rowkey行对应的不同版本的数据。
HBase 中通过 rowkey和 columns 确定的为一个存储单元(cell),每个cell都保存着同一份数据的多个版本,通过时间戳来索引。
Hbase的一些操作(表,行键,列族,列)
创建表
HBase是没有schema的,就是在创建表的时候不需要指定表中有哪些列,只需要指定有多少个列蔟
create "表名","列蔟1", "列蔟2"
PUT数据:
put 'Student', '0001', 'StuInfo:Name', 'Tom Green', 1
put 'Student', '0001', 'StuInfo:Age', '18'
put 'Student', '0001', 'StuInfo:Sex', 'Male'
put 'Student', '0001', 'Grades:BigData', '80'
第一个参数Student为表名;
第二个参数0001为行键的名称,为字符串类型;
第三个参数StuInfo:Name为列族和列的名称,中间用冒号隔开。列族名必须是已经创建的,否则 HBase 会报错;列名是临时定义的,因此列族里的列是可以随意扩展的;
第四个参数Tom Green为单元格的值。在 HBase 里,所有数据都是字符串的形式;
最后一个参数1为时间戳,如果不设置时间戳,则系统会自动插入当前时间为时间戳。
更新:
put 'Student', '0001', 'Stulnfo:Name', 'Jim Green'
删除表
删除表之前我们首先要禁用表,如果不禁用表这里会出现无法删除的情况
禁用表
disable “表名”
删除表
drop “删除表”
查询:
Hbase中查找数据一般包括两种方式:
1) Get方式,通过Rowkey进行查询。都是获取一条数据。
2)是通过Scan进行全表查询,可以设置一些过滤条件,返回一批数据。
Hbase CURD
https://blog.csdn.net/qq_5590...
https://blog.csdn.net/a284365...
https://blog.csdn.net/FengTin...
https://zhuanlan.zhihu.com/p/...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。