Hbase的基本操作(CURD)

Hbase的基本操作(CURD)

Hbase


仅供参考学习


一、Hbase是什么?

Hbase是一个分布式的面向列的开源数据库,且Hbase不同于一般的关系数据库,它是一个适用于非结构化数据存储的数据库,且是基于列的模式。它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服务

表的基本结构
在这里插入图片描述

二、与传统数据库的差异

MySQL、OracleHbase
行储存列储存
适用于OLTP业务平衡了OLTP和OLAP
强一致性强一致性
支持二级索引不支持二级索引
支持全文索引不支持全文索引

强一致性:例如MySQL的全同步复制模式,在该模式下用户与MySQL交互,主库和备库同binlog时,主库只有在收到备库的成功响应之后,才能够向客户端反馈提交成功。因此在用户获得响应时,主库和备库的数据副本已经达到了一致,所以后续的读操作肯定不会出现问题,这种模式称为强一致性。
但是该模式具有很严重的弊端:

性能差: 主库必须等到所有备库均返回成功后,才能向用户反馈提交成功。
可用性降低: 在全同步复制模式下,集群中的节点被串联在一起,集群整体的可用性就降低了,且集群越大可用性问题越严重。
正因为这两个问题,实现强一致性需要的代价太大,所以大部分产品选择弱一致性

二级索引:叶子节点中存储主键值,每次查找数据时,根据索引找到叶子节点中的主键值,根据主键值再到聚簇索引中得到完整的一行记录。
全文索引:通过关键字的匹配来进行查询过滤,基于相似度的查询

OLTP和OLAP
在这里插入图片描述

在这里插入图片描述

三、基本操作

1.表操作

1.1 创建表

hbase> create ‘tablename’,‘column_family01’,‘column_family02’

create 'student','info','grade'

tablename: 表名
column_family01,column_family02:列族名
注意:
不用创建列,列名是后期插入数据时才定义的

1.2 删除表

表创建成功后,默认状态是enable,即“使用中”的状态,删除表之前需先设置表为“关闭中”。

disable 'student'

再使用关键字drop删除表

drop 'student'
1.3 增加列族

hbase> alter ‘tablename’,‘column_famaily03’

alter 'student','sci'
1.4 删除列族名

hbase> alter ‘ table_name ’, ‘delete’ => ‘ column family ’
hbase> alter 'table_name ',{NAME=>‘column family’,METHOD=>‘delete’}

alter 'student','delete'=>'sci'
alter 'student',{NAME=>'grade',METHOD=>'delete'}
1.5查看表结构

hbase> describe ‘table_name’

describe 'student'

2.对数据的操作

2.1插入(更新)数据

put ‘table_name’,‘row_key1’,‘column_family:column’,‘value’
注:
row_key: 行键
column: 列名
只能一列一列的加,并不能一次性插入多条列数据(当插入的列已经有数据时就会覆盖原有值)

put 'student','student_01','grade:math','20'
put 'student','student_01','grade:english','96'
put 'student','student_01','info:name','Jack'
put 'student','student_01','info:class','1101'
2.2 查看数据(get|scan)

get ‘table_name’ ,‘row_key’
scan ‘table_name’
get: 只查看某个行键的数据
scan:查看表的所有数据

get 'student','student_01'
scan 'student'
2.3 删除一条行数据中的列值

hbase> deleteall ‘table_name’,‘row_key’,‘column_family:column’
hbase>delete ‘table_name’,‘row_key’,‘column_family:column’

deleteall'student','student_01','info:class'
2.4 删除行数据(delete|deleteall)

deleteall ‘table_name’,‘row_key’

deleteall:删除具体到哪一行中的某个列族下的某一列数据

deleteall 'student','student_01'

文章多处借鉴,代码亲测,若有侵权,还忘告知:

  • 7
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值