【大数据存储与处理】实验二 HBase 过滤器操作

实验二 HBase 过滤器操作 

【实验目的】: 

1.掌握使用 HBase 过滤器进行全表扫描。 

【实验内容与要求】: 

在 HBase 中,Get 和 Scan 操作都可以使用过滤器来设置输出的范围,类似于 SQL 里面 

的 Where 查询条件。使用 show_filter 命令可以查看当前 HBase 支持的过滤器类型。 

使用过滤器的语法格式如下所示: 

scan '表名'{Filter => ”过滤器(比较运算符,’比较器’)

Filter=>指明过滤的方法,整体可用大括号引用,也可以不用大括号。过滤的方法使用 

双引号引用,而比较方式用小括号引用。 

在使用过滤器之前先创建这样的表结构: 

具体执行命令如下: 

创建表:create 'Student''StuInfo''Grades' 

插入第一个逻辑行的数据: 

put 'Student', '001', 'StuInfo:name','alice' 

put 'Student', '001', 'StuInfo:age','18' 

put 'Student', '001', 'StuInfo:sex','female' 

put 'Student', '001', 'Grades:english','80' 

put 'Student', '001', 'Grades:math','90' 

同样插入其他两行数据。 

【大数据存储与处理】实验二 HBase 过滤器操作_第1张图片

1.行键过滤器 

包括 RowFilterPrefixFilterKeyOnlyFilterFirstKeyOnlyFilter 等 

格式:scan ‘表名{Filter =>“过滤器比较运算符,比较器’)”} 

1RowFilter:针对行键进行过滤 

例 1:显示行键前缀为 开头的键值对; 

scan 'student',{FILTER=>"RowFilter(=,'substring:001')"} 

【大数据存储与处理】实验二 HBase 过滤器操作_第2张图片

例 2:显示行键字节顺序大于 002 的键值对; 

scan 'student',FILTER=>"RowFilter(>,'binary:002')" 

【大数据存储与处理】实验二 HBase 过滤器操作_第3张图片

2PrefixFilter:行键前缀过滤器 

例 3:扫描前缀为 001 的行键 

scan 'student',FILTER=>"PrefixFilter('001')" 

【大数据存储与处理】实验二 HBase 过滤器操作_第4张图片

3FirstKeyOnlyFilter:扫描全表,显示每个逻辑行的第一个键值对 

例 4: scan 'student',FILTER=>"FirstKeyOnlyFilter()" 

【大数据存储与处理】实验二 HBase 过滤器操作_第5张图片

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

例 5:扫描显示行键 001 到 002 范围内的键值对 

【大数据存储与处理】实验二 HBase 过滤器操作_第6张图片此条命令等同于: 

【大数据存储与处理】实验二 HBase 过滤器操作_第7张图片

2.列族与列过滤器 

1FamilyFilter:针对列族进行比较和过滤。 

例 1:显示列族前缀为 stu 开头的键值对; 

scan 'student',FILTER=>"FamilyFilter(=,'substring:stu’) "

【大数据存储与处理】实验二 HBase 过滤器操作_第8张图片

scan 'student',FILTER=>"FamilyFilter(>=,‘binary:stu’) "

【大数据存储与处理】实验二 HBase 过滤器操作_第9张图片

2QualifierFilter:列标识过滤器。 

例 2:显示列名为 name 的记录; 

scan 'student',FILTER=>"QualifierFilter(=,'substring:name')" 

【大数据存储与处理】实验二 HBase 过滤器操作_第10张图片

3ColumnPrefixFilter:对列名前缀进行过滤。 

例 2:显示列名为 name 的记录; 

scan 'student',FILTER=>"ColumnPrefixFilter('name') " 

【大数据存储与处理】实验二 HBase 过滤器操作_第11张图片

等价于 scan 'student',FILTER=>"QualifierFilter(=,'substring:name')" 

【大数据存储与处理】实验二 HBase 过滤器操作_第12张图片(4MultipleColumnPrefixFilter:可以指定多个前缀 

例 3:显示列名为 name 和 age 的记录; 

scan 'student',FILTER=>"MultipleColumnPrefixFilter('name','age')" 

【大数据存储与处理】实验二 HBase 过滤器操作_第13张图片

5ColumnRangeFilter :设置范围按字典序对列名进行过滤; 

scan 'student',FILTER=>"ColumnRangeFilter('bi',true,'na',true)" 

【大数据存储与处理】实验二 HBase 过滤器操作_第14张图片

3.值过滤器 

1ValueFilter :值过滤器。 

例 1:查询值等于 19 的所有键值对 

scan 'student',FILTER=>"ValueFilter(=,'binary:19') " 

【大数据存储与处理】实验二 HBase 过滤器操作_第15张图片

scan 'student',FILTER=>"ValueFilter(=,'substring:19') 

【大数据存储与处理】实验二 HBase 过滤器操作_第16张图片

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

例 2:查询 stuinfo 列族 age 列中值等于 19 的所有键值对 

scan 'student',{COLUMN=>'stuinfo:age',FILTER=>"SingleColumnValueFilter('stuinfo','age',=,'binary: 19')"} 

【大数据存储与处理】实验二 HBase 过滤器操作_第17张图片

4.其他过滤器 

1ColumnCountGetFilter :限制每个逻辑行返回的键值对数 

例 1:返回行键为 001 的前 个键值对 

get 'student','001',FILTER=>"ColumnCountGetFilter(3)" 

【大数据存储与处理】实验二 HBase 过滤器操作_第18张图片

2PageFilter :基于行的分页过滤器,设置返回行数。 

例 2:显示一行 scan 'student',FILTER=>"PageFilter(1)" 

【大数据存储与处理】实验二 HBase 过滤器操作_第19张图片

3ColumnPaginationFilter :基于列的进行分页过滤器,需要设置偏移量与返回数量 。 

例 3:显示每行第 列之后的 个键值对 

scan 'student',FILTER=>"ColumnPaginationFilter(2,1)" 

【大数据存储与处理】实验二 HBase 过滤器操作_第20张图片

5python hbase 过滤器编程。 

编程输出 Student1 表中行键前缀为 00、列标识为 Name 的值。 

from thrift import Thrift 

from thrift.transport import TSocket 

from thrift.transport import TTransport 

from thrift.protocol import TBinaryProtocol 

from hbase import Hbase 

from hbase.ttypes import * 

host = '172.16.3.68' 

port = 9090 

table = 'Student1' 

transport = TSocket.TSocket(host, port) 

transport = TTransport.TBufferedTransport(transport) 

protocol = TBinaryProtocol.TBinaryProtocol(transport) 

client = Hbase.Client(protocol) 

transport.open() 

ss = client.scannerOpenWithPrefix("Student1","00",["StuInfo:Name"])

print("ss:",client.scannerGetList(ss,10)) 

#关闭 scannerId 

client.scannerClose(ss) 

程序运行结果: 

【大数据存储与处理】实验二 HBase 过滤器操作_第21张图片

scannerOpenWithPrefix(tableName,startAndPrefix,columns):在指定表中,扫描具有指定 

前缀的行,扫描指定列的数据。返回一个 ScannerIDint 类型 

tableName:表名 

startAndPrefix:行前缀 

columns:列名列表,list 类型 

6. Hbase 批量数据导入。把/home/hadoop/datafile 目录下 music1.txtmusic2.txt、 

music3.txt 三个记事本文件数据导入到 hbase 中的 ms 表中。参考命令如下: 

  1. hbase shell 中建表:create 'ms','info' 

2hadoop fs -mkdir /user/hduser/ms 

3hadoop fs -put music1.txt music2.txt music3.txt /user/hduser/ms 

4hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=tmp -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:singer,info:gender,info:ryghme,info:terminal ms /user/hduser/ms 

5hbase shell 中查看表数据:scan 'ms' 

【大数据存储与处理】实验二 HBase 过滤器操作_第22张图片

【大数据存储与处理】实验二 HBase 过滤器操作_第23张图片

思考题:HBase 的过滤器有哪些?分别具有什么作用? 

HBase 是一个分布式、面向列的NoSQL数据库,它提供了各种过滤器来帮助你在检索数据时进行过滤和筛选。这些过滤器可以用于扫描和查询操作,以便只返回符合特定条件的数据。以下是一些常见的 HBase 过滤器以及它们的作用:

1. SingleColumnValueFilter:

   - 作用:根据指定列的值进行过滤。

   - 用途:允许你筛选出特定列的值等于或不等于指定值的行。

2. SingleColumnValueExcludeFilter:

   - 作用:与 SingleColumnValueFilter 类似,但是它排除满足条件的行而不返回它们。

   - 用途:用于排除特定列的值等于或不等于指定值的行。

3. FamilyFilter:

   - 作用:基于列族进行过滤。

   - 用途:可以用于只检索特定列族的数据,或排除特定列族的数据。

4. QualifierFilter:

   - 作用:基于列限定符(Qualifier)进行过滤。

   - 用途:允许你只返回包含或不包含特定列限定符的列。

5. RowFilter:

   - 作用:基于行键进行过滤。

   - 用途:可以用于根据行键的前缀或模式来筛选行。

6. PrefixFilter:

   - 作用:根据行键的前缀进行过滤。

   - 用途:用于筛选出具有特定前缀的行。

7. PageFilter:

   - 作用:限制返回的结果数量。

   - 用途:允许你指定最大返回行数,通常用于分页查询。

8. TimestampsFilter:

   - 作用:基于时间戳进行过滤。

   - 用途:可以用于筛选出特定时间范围内的数据。

9. ValueFilter:

   - 作用:基于值进行过滤。

   - 用途:可以用于只返回具有特定值的行。

10. CompareFilter:

    - 作用:根据自定义的比较器进行过滤。

    - 用途:允许你定义自己的比较逻辑来筛选数据。

这些过滤器可以根据你的需求组合使用,以实现复杂的数据检索和过滤操作。你可以根据具体的业务需求选择合适的过滤器来优化查询性能并满足数据检索要求。注意,HBase 过滤器通常在客户端应用程序中配置和使用,以便在查询数据时应用过滤条件。

小结 

掌握使用 HBase 过滤器进行全表扫描。注意区分 hbase shell 命令和 linux 命令。

你可能感兴趣的:(大数据,linux,运维,hbase)