Hbase具体操作(图文并茂且超超全~~~)

目的:
(1)理解 HBase 在 Hadoop 体系结构中的角色。
(2)熟练使用 HBase 操作常用的 Shell 命令。
目标:
(1)熟悉hbase相关操作,掌握建表、修改表、查表、删除表等操作。
(2)可以自己建一个表,熟悉上述操作,并插入不少于10条的数据,以便于后续过滤器的使用。

进行相关操作的步骤:启动hadoop–>启动hbase–>打开hbase shell
在这里插入图片描述
在这里插入图片描述一、数据定义
1.创建表
(1)HBase中创建表需要指明表名和列族名,如创建表中的学生信息表Student的命令如下:

create 'student', 'stuinfo', 'Grades'

这条命令创建了名为Student的表,表中包含两个列族,分别为StuInfo和Grades。注意在HBase Shell语法中,所有字符串参数都必须包含在单引号中。
在这里插入图片描述

创建表结构以后,可以使用exsits命令查看此表是否存在,或使用list命令查看数据库中所有表。

exists 'Student'
list

在这里插入图片描述

可以使用describe命令查看指定表的列族信息。describe命令描述了表的详细结构,包括有多少个列族、每个列族的参数信息。
describe ‘Student’
在这里插入图片描述

2.更改表的结构
describe命令显示的参数都可以使用alter命令进行修改。
HBase表的结构和表的管理可以通过alter命令来完成,使用这个命令可以完成更改列族参数信息、增加列族、删除列族以及更改表的相关设置等操作。首先修改列族的参数信息,如修改列族的版本。

alter 'Student', {NAME =>'Grades', VERSIONS=>3}

在这里插入图片描述

修改多个列族的参数、形式与create命令类似。这里要注意修改已存有数据的列族属性时,HBase需要对列族里所有的数据进行修改,如果数据量很大,则修改可能要占很长时间。
如果需要在Sudent表中新增一个列族hobby,使用以下命令:

alter 'Student','hobby'

在这里插入图片描述

如果要移除或者删除已有的列族,以下两条命令均可完成:

alter 'Student', {NAME=>'hobby',METHOD=>'delete'}

在这里插入图片描述

alter 'Student','delete'=>'hobby

在这里插入图片描述在这里插入图片描述
另外,HBase表至少要包含一个列族,因此当表中只有一个列族时,无法将其删除。
3.删除表
删除表之前需要先禁用表,再进行删除,使用以下命令完成表的删除:

disable '表名'
drop  '表名'

其中,使用disable禁用表以后,可以使用is disable查看表是否禁用成功。另外。如果只是想清空表中的所有数据,使用truncate命令即可,除表,并按原结构重新建立表操作:
对于实践操作来说,可以先建立一个新表“Yaoshande”,在对其进行删除操作。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

二、数据操作
1.put 添加一个值到指定单元格中
HBase中插入数据使用put命令,put向表中增加一个新行数据,或覆盖指定行的数据:

put 'Student', "0001, 'stuinfo: Name', 'Tom Green',1

在上述命令中,第一个参数Student为表名;第二个参数0001为方行键的名称,为字符串类型;第三个参数Stulnfo: Name为列族和列的名称,中间用冒号隔开,列族名必须是已经创建的,否则HBase会报错;列名是临时定义的,因此列族里的列是可以随意扩展的;第四个参数Tom Green为单元格的值,在HBase里,所有数据都是字符串的形式;最后一个参数1为时间戳,如果不设置时间戳,则系统会自动插入当前时间为时间戳。
注意 put命令只能插入单元格的数据。
为了方便日后过滤器的使用,输入10条以上的数据。为方便大家观看,我这只列出部分截图。

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'
put 'Student', '0001',  'Grades:Computer','90'
put 'Student', '0001', 'Grades:Math', '85'

put 'Student', '0002', 'StuInfo:Name', 'Jack',1
put 'Student', '0002', 'StuInfo:Age', '19' 
put 'Student', '0002', 'StuInfo:Sex', 'Male'
put 'Student', '0002', 'Grades:BigData', '85'
put 'Student', '0002', 'Grades:Java','83'
put 'Student', '0002', 'Grades:Math','82'

put 'Student', '0003', 'StuInfo:Name', 'Marry',1
put 'Student', '0003', 'StuInfo:Age', '20' 
put 'Student', '0003', 'StuInfo:Sex', 'Female'
put 'Student', '0003', 'Grades:BigData', '59'
put 'Student', '0003', 'Grades:Java','69'

put 'Student', '0004', 'StuInfo:Name', 'Gavin',1
put 'Student', '0004', 'StuInfo:Age', '21' 
put 'Student', '0004', 'StuInfo:Sex', 'Female'
put 'Student', '0004', 'Grades:BigData', '90'
put 'Student', '0004', 'Grades:Java','89'


put 'Student', '0005', 'StuInfo:Name', 'Sun',1
put 'Student', '0005', 'StuInfo:Age', '18' 
put 'Student', '0005', 'StuInfo:Sex', 'Female'
put 'Student', '0005', 'Grades:BigData', '99'
put 'Student', '0005', 'Grades:Java','94'

在这里插入图片描述在这里插入图片描述
2.delete删除操作
delete命令可以从表中删除一个单元格或一个行集,语法与put类似,必须指明表名和列族名称,而列名和时间戳是可选的。

delete 'Student','0005','Grade'

需要注意的是, delete操作并不会马上删除数据,只会将对应的数据打上删除标记tombstone ,只有在合并数据时,数据才会被删除。另外,delete命令的最小粒度是Cell,例如,执行以下命令将删除Student表中行键为0001,StuInfo列族成员为Age,时间戳小于等于2的数据:

delete 'Student','0005','StuInfo:Age',2

在这里插入图片描述

delete命令不能跨列族操作、如需删除表中所有列族在某一行上的数据,即删除一个逻辑行,则需要使用delete all命令,如下所示,不需要指定列族和列的名称。

delete 'Student','0005'  

3.get:通过表名、行键等参数获取行或单元格数据

get 'Student','0001',{COLUMN=>'StuInfo',VERSIONS=>3}

在这里插入图片描述

4.scan:遍历表并输出满足条件的行记录。
指定列族的名称:

scan 'Student',{COLUMN=>'StuInfo'}

在这里插入图片描述

指定列族和列的名称

scan 'Student',{COLUMN=>' StuInfo :Name'}

指定输出行数:

scan 'Student',{LIMIT=>1}

指定输出行键范围:

scan 'Student',{STARTROW=>'0003',ENDROW=>'0003'}

在这里插入图片描述

三、过滤器操作
在HBase中, getscan操作都可以使用过滤器来设置输出的范围,类似SQL里的Where查询条件。使用show filter命令可以查看当前HBase支持的过滤器类型。

1. 行键过滤器
RowFilter配合比较器和运算符,实现行键字符串的比较和过滤。例如,匹配行键中大0001的数据,可使用binary比较器;匹配以0001开头的行键,可使用substring比较器,注意substring不支持大于或小于运算符。

scan 'Student',FILTER=>"RowFilter(=,'substring:0001')"

在这里插入图片描述

scan 'Student',FILTER=>"RowFilter(>,'binary:0001')"

在这里插入图片描述

PrefixFilter:行键前缀比较器,比较行键前缀

scan 'Student',FILTER=>"PrefixFilter('0001')"

在这里插入图片描述

KeyOnlyFilter:只对单元格的键进行过滤和显示,不显示值

scan 'Student',FILTER=>"KeyOnlyFilter()"

在这里插入图片描述

FirstKeyOnlyFilter只扫描显示相同键的第一个单元格,其键值对会显示出来

scan 'Student',FILTER=>"FirstKeyOnlyFilter()"

在这里插入图片描述

InclusiveStopFilter:替代ENDROW返回终止条件行

scan 'Student',{STARTROW=>'0001',FILTER=>"InclusiveStopFilter('binary:0002')"}

在这里插入图片描述

2.列族与列过滤器
针对列族进行过滤的过滤器为FamilyFilter,其语法结构与Rowfilter类似,不同之处在于FamilyFilter是对列族名称进行过滤的。例如、以下命令扫描Student表显示列族为Girades的行。

scan 'Student',FILTER=>"FamilyFilter(=,'substring:Grades')"

在这里插入图片描述

QualifierFilter:列标识过滤器,只显示对应列名的数据

scan 'Student',FILTER=>"QualifierFilter(=,'substring:Math')"

在这里插入图片描述

ColumnPreFilter:对列名称的前缀进行过滤

scan 'Student',FILTER=>"ColumnPreFilter('Ma')"

在这里插入图片描述

MultipleColumnPrefixFilter:可以指定多个前级对列名称

scan 'Student',FILTER=>"MultipleColumnPrefixFilter('Ma','Ag')"

在这里插入图片描述

ColumnRangeFilter:过滤过滤列名称的范围

scan 'Student',FILTER=>"ColumnRangeFilter('Big',true,'Math',false)"

在这里插入图片描述

3.值过滤器
在HBase的过滤器中也有针对单元格进行扫描的过滤器,即值过滤器。
ValueFilter:值过滤器,找到符合值条件的健值对

scan 'Student',FILTER=>"ValueFilter(=,'substring:Jack')"

在这里插入图片描述

get 'Student','0004',FILTER=>"ValueFilter(=,'substring:Jack')"

在这里插入图片描述

SingleColumnValueFilter:在指定的列族和列中进行比较的值过滤器

scan 'Student',FILTER=>"SingleColumnValueFilter('StuInfo','Name',=,'substring:Jack')"

在这里插入图片描述

SingleColumnValueExcludeFilter:排除匹配成功的值

scan 'Student',FILTER=>"SingleColumnValueExcludeFilter('StuInfo','Name',=,'substring:Jack')"

在这里插入图片描述

4.其他过滤器
ColumnCountGetFilter:限制每个逻辑行返回键值对个数,在get方法中使用

get 'Student','0001',FILTER=>"ColumnCountGetFilter(3)"

在这里插入图片描述

TimestampsFilter:时间戳过滤,支持等值,可以设置多个时间戳

scan 'Student',FILTER=>"TimestampsFilter(1,4)"

在这里插入图片描述

InclusiveStopFilter:设置停止行

scan 'Student',{STARTROW=>'0001',ENDROW=>'0004',FILTER=>"InclusiveStopFilter('binary:0003')"}

在这里插入图片描述

PageFilter:对显示结果按行进行分页显示

scan 'Student',{STARTROW=>'0001',ENDROW=>'0004',FILTER=>"PageFilter(3)"}

在这里插入图片描述

ColumnPaginationFilter:对一行的所有列分页,只返回[offset, offset+limit]范围内的列

scan 'Student',{STARTROW=>'0001',ENDROW=>'0004',FILTER=>"ColumnPaginationFilter(2,1)"}

在这里插入图片描述

好了,到此处本期分享就结束了,我们下期再见,更多精彩好文,欢迎一键三连~~~

  • 26
    点赞
  • 142
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值