irpas技术客

Hbase具体操作(图文并茂且超超全~~~)_菜菜挺住_熟悉常用的hbase操作

大大的周 722

目的: (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)"}

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


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #熟悉常用的hbase操作 #目的1理解 #HBase # #Hadoop #体系结构中的角色 #2熟练使用