目的:
(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中, get和scan *** 作都可以使用过滤器来设置输出的范围,类似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)"}
好了,到此处本期分享就结束了,我们下期再见,更多精彩好文,欢迎一键三连~~~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)