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

Hbase具体 *** 作(图文并茂且超超全~~~),第1张

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)"}

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5575226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存