目录
一、Hbase原理
二、HBase数据库操作
三、遇到的问题和解决方法
一、Hbase原理
HBase的数据模型:
行键 | 时间戳 | 列族:contents | 列族:anchor | 列族:mime |
“com.cnn.www” | T9 | Achor:cnnsi.com=”CNN” | ||
T8 | Achor:my.lock.ca=”CNN.com” | |||
T6 | Contents:html=”<html>…” | Mime:type=”text/html” | ||
T5 | Contents:html=”<html>…” | |||
T3 | Contents:html=”<html>…” |
HBase是一个高可靠性、高性能、面向列、可伸缩的分布式数据库。利用HBase技术可在廉价的PC Server上搭建起大规模结构化存储集群。
HBase是非关系型数据库,它不要求数据之间有严格的关系,同时它允许在同一列不同行中存储不同类型的数据。Hbase作为Hadoop框架下的数据库,是被设计成在一个服务器集群上运行的。
二、HBase数据库操作
示例:在Hbase建立如下表格数据,表格命名为Phone,并对Phone表执行数据查询、修改、删除及表格的删除操作。
行键 | info | sale | 时间戳 | |
brand | name | price | ||
P001 | Apple | Iphone16 | 8999 | 202404 |
P001 | Iphone15 | 202303 | ||
P003 | HUAWEI | Mate 30 pro | 5999 | 201906 |
2、HBase创建数据库表
(1)建立数据库表,使用create ‘表名’, ‘列族名1’,’列族名2’,’列族名N’,具体操作如下所示。
(2)执行命令list查看所有数据库表,下图显示Phone表,说明已经创建成功。
(3)describe ‘Phone’查看Phone表的结构。
(4)count ‘Phone’查看Phone表中的所有记录数量,此时未添加数据,记录为0。
2、增加数据操作
put ‘表名’,’行键’,’列族:列’,’值’,具体操作如下所示。对Phone表所有记录进行添加。
3、查询数据操作
(1)查看表的所有记录,使用 scan ‘表名’,具体操作如下所示。
(2)查看某个行键下的所有记录,使用 get ‘表名’,‘行键’,具体操作如下所示。
(3)查看某个行键下的列族记录,使用get '表名','行键','列族',具体操作如下所示。
(4)查看列族的某个列记录,使用get '表名','行键','列族:列’,具体操作如下所示。
3、更新数据操作
Hbase更新数据即追加数据,对相同行键、列族和列名的数据再次添加即为数据的更新,重写一遍进行覆盖实现更新。Phone表中要把P001的价格从8999更新为9888,具体操作如下所示。
4、删除数据操作
(1)删除某个列族中的列,使用delete‘表名’,‘行名’,‘列族:列',具体操作如下所示。
(2)使用get查询删除是否成功,具体操作如下所示。
(3)删除整行记录,使用deleteall '表名','行键',具体操作如下所示。
(3)清空表所有记录,使用truncate '表名',具体操作如下所示。
5、删除数据表
(1)蔽数据表: disable ‘表名’
(2)查看表是否可用:is_enabled ‘表名’
(3)删除数据表:drop '表名'
具体操作如下所示。
三、遇到的问题和解决方法
我自己操作时遇到的问题和一些解决方法(大家可以在评论区讨论):
1、hbase shell命令回车后报错,提示zookeeper连接出现问题,后来发现是hbase-site.xml文件没有正确配置,正确配置后可以启动zookeeper,正常运行。(这里可以查看我的Hadoop和Hbase的配置文章,里面有说如何配置hbase-site.xml文件)
【Hadoop和Hbase集群配置】3台虚拟机、jdk+hadoop+hbase下载和安装、环境配置和集群测试_虚拟机hbase环境配置-CSDN博客
2、增加数据时,put之后没有报错,可是get和scan查看数据却没有显示内容,说明添加数据出现问题,我试了重新启动hbase服务,也没有解决,后来删除Phone表重新创建,就可以添加数据了。
3、Phone表里有一个时间戳为202303的P001记录,可是在已经添加了Iphone16的数据之后,Iphone15的就put失效,和上面的问题一样,或许是因为202303的记录比202404的记录要旧,被新时间戳的记录覆盖了,所以显示不了。