简单理解HBase

简介

HBase由Yahoo!开发后来贡献给Apache的一个基于HDFS的,开源的,分布式,可扩展,能存储大量数据的非关系型数据库

基本操作

注意问题

1,HBase不支持SQL,他提供了一套单独的操作命令

2,HBase适合存储结构化和半结构化数据

3,HBase的列是动态增删的

4,HBase作为数据库提供完整的增删改查功能,但HBase是基于HDFS存储数据的,所以HBase完成“改”操作时比较特殊。当用户修改数据时,HBase会给每条数据增加一个时间戳并追加到文件末尾,当用户获取数据时,HBase默认给用户返回时间戳最大的数据,从用户角度而言,数据已经被修改

5,HBase 建表时,默认只保留一个版本数据,返回一个版本数据

基本概念

1,Rowkey:行键

        HBase中没有主键的概念,取而代之的是行键

        HBase建表时不用指定行键,但插入数据时要指定行键。

        HBase默认对行键进行字典序排序

2,Column Family:列族

        HBase中没有join的概念,取而代之的是列族

        HBase中至少包含一个列族,每个列族可以看成一个子表

        HBase中强调列族,建表时必须指定列族,且列族指定后不可变,列再添加数据时动态增删

3,VERSION:版本

        每条数据的时间戳就是这个数据的版本

4,Cell:单元格

        通过表名+列族+列名+行键+版本才能锁定唯一一条数据

5,namespace:命名空间

        HBase中没有database的概念,取而代之的时namespace

        HBase启动后自带两个命名空间

                hbase空间:存放的时HBase本身的一些配置信息

                default空间:建表默认存放的空间

基本命令

添加数据

#进入HBase的客户端/命令行
hbase shell

#创建person表,包含三个列族
create 'person', { NAME => 'basic' }, { NAME => 'info' }, { NAME => 'ext' }
# 或者
create 'person', 'basic', 'info', 'ext'

#建表的时候指定版本
# basic列族的数据需要保留3个版本
# info列族的数据需要保留5个版本
# ext列族依然默认保留1个版本
create 'person02', { NAME => 'basic', VERSIONS => 3 }, { NAME => 'info', VERSIONS => 5 }, { NAME => 'ext' }

#添加数据
# append的时候,如果数据不存在,那么添加数据;如果行键对应的这一列已经存在,那么在原来的数据之后继续追加数据
append 'person', 'p2', 'basic:name', 'Jack'
append 'person', 'p2', 'basic:gender', 'male'
append 'person', 'p2', 'info:weight', 60.3
append 'person', 'p2', 'ext:address', 'beijing'

#添加/修改数据
# put的时候,如果行键对应的列已经存在,那么修改这个数据;如果列不存在,那么添加这一列
put 'person', 'p2', 'basic:name', 'Frank'

查询数据

#查询数据
# 获取一行的数据:get 表名, 行键 
get 'person', 'p1'
# 获取指定行键指定列族的数据:get 表名, 行键, {COLUMN => 列族名}
get 'person', 'p1', {COLUMN => 'basic'}
# 或者
get 'person', 'p1', 'basic'
# 获取指定行键指定列的值
get 'person', 'p1', {COLUMN => 'basic:name'}
# 或者
get 'person', 'p1', 'basic:name'
# 获取多个列族或者列的值
get 'person', 'p1', {COLUMN => ['basic:name', 'info:height']}
# 或者
get 'person', 'p1', 'basic:name', 'info:height'

#扫描整表
scan 'person'
# 获取指定列族的数据
scan 'person', {COLUMNS => 'basic'}
# 获取多个列族的值
scan 'person', {COLUMNS => ['basic', 'ext']}
# 获取指定列的值
scan 'person', {COLUMNS => 'basic:name'}

#获取多个版本数据
# get操作
get 'person', 'p1', {COLUMN => 'basic:age', VERSIONS => 3}
# scan操作
scan 'person', {COLUMNS => 'basic:age', VERSIONS => 3}

删除数据

#删除数据
# 删除指定行键指定列族中的所有的列
deleteall 'person', 'p1', 'basic'
# 删除一行数据
deleteall 'person', 'p2'

#先禁用表,才能删除表
# 禁用表
disable 'person'
# 删除表
drop 'person'

#启动表
enable 'person'

操作空间

#查看所有空间的所有表
list

#查看所有空间
list_namespace

#创建空间
create_namespace 'demo'

# 在指定空间下建表
create 'demo:orders', 'basic'
# 添加数据
put 'demo:orders', 'o1', 'basic:price', 102.48
# 删除表
disable 'demo:orders'
drop 'demo:orders'

#删除空间
# 要求空间必须为空
drop_namespace 'demo'

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值