`

HBase基础之常用过滤器hbase shell操作

 
阅读更多

最近需要对hbase进行性能优化,苦于对hbase的scan命令语法不熟悉,遂网上搜了点资料,觉得不错,给予记下。

 

 

创建表

create 'test1', 'lf', 'sf'

lf: column family of LONG values (binary value)

-- sf: column family of STRING values

 

导入数据

put 'test1', 'user1|ts1', 'sf:c1', 'sku1'
put 'test1', 'user1|ts2', 'sf:c1', 'sku188'
put 'test1', 'user1|ts3', 'sf:s1', 'sku123'

put 'test1', 'user2|ts4', 'sf:c1', 'sku2'
put 'test1', 'user2|ts5', 'sf:c2', 'sku288'
put 'test1', 'user2|ts6', 'sf:s1', 'sku222'

一个用户(userX),在什么时间(tsX),作为rowkey

 

对什么产品(value:skuXXX),做了什么操作作为列名,比如,c1: click from homepage; c2: click from ad; s1: search from homepage; b1: buy

 

查询案例

 

谁的值=sku188

 

scan 'test1', FILTER=>"ValueFilter(=,'binary:sku188')"

ROW                          COLUMN+CELL                    
 user1|ts2                   column=sf:c1, timestamp=1409122354918, value=sku188

 

谁的值包含88

 

scan 'test1', FILTER=>"ValueFilter(=,'substring:88')"

ROW                          COLUMN+CELL    
 user1|ts2                   column=sf:c1, timestamp=1409122354918, value=sku188
 user2|ts5                   column=sf:c2, timestamp=1409122355030, value=sku288

  

 

通过广告点击进来的(column为c2)值包含88的用户

 

scan 'test1', FILTER=>"ColumnPrefixFilter('c2') AND ValueFilter(=,'substring:88')"

 

ROW                          COLUMN+CELL

 user2|ts5                   column=sf:c2, timestamp=1409122355030, value=sku288

通过搜索进来的(column为s)值包含123或者222的用户

 

scan 'test1', FILTER=>"ColumnPrefixFilter('s') AND ( ValueFilter(=,'substring:123') OR ValueFilter(=,'substring:222') )"

ROW                          COLUMN+CELL
 user1|ts3                   column=sf:s1, timestamp=1409122354954, value=sku123
 user2|ts6                   column=sf:s1, timestamp=1409122355970, value=sku222

 

rowkey为user1开头的

 

scan 'test1', FILTER => "PrefixFilter ('user1')"

ROW                          COLUMN+CELL
 user1|ts1                   column=sf:c1, timestamp=1409122354868, value=sku1
 user1|ts2                   column=sf:c1, timestamp=1409122354918, value=sku188
 user1|ts3                   column=sf:s1, timestamp=1409122354954, value=sku123

 

FirstKeyOnlyFilter: 一个rowkey可以有多个version,同一个rowkey的同一个column也会有多个的值, 只拿出key中的第一个column的第一个version

KeyOnlyFilter: 只要key,不要value

scan 'test1', FILTER=>"FirstKeyOnlyFilter() AND ValueFilter(=,'binary:sku188') AND KeyOnlyFilter()"

ROW                          COLUMN+CELL
 user1|ts2                   column=sf:c1, timestamp=1409122354918, value=

 

从user1|ts2开始,找到所有的rowkey以user1开头的

 

scan 'test1', {STARTROW=>'user1|ts2', FILTER => "PrefixFilter ('user1')"}

ROW                          COLUMN+CELL
 user1|ts2                   column=sf:c1, timestamp=1409122354918, value=sku188
 user1|ts3                   column=sf:s1, timestamp=1409122354954, value=sku123 

 

从user1|ts2开始,找到所有的到rowkey以user2开头

 

scan 'test1', {STARTROW=>'user1|ts2', STOPROW=>'user2'}

ROW                          COLUMN+CELL
 user1|ts2                   column=sf:c1, timestamp=1409122354918, value=sku188
 user1|ts3                   column=sf:s1, timestamp=1409122354954, value=sku123

查询rowkey里面包含ts3的

import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.filter.SubstringComparator
import org.apache.hadoop.hbase.filter.RowFilter
scan 'test1', {FILTER => RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'), SubstringComparator.new('ts3'))}
ROW                          COLUMN+CELL
 user1|ts3                   column=sf:s1, timestamp=1409122354954, value=sku123 

查询rowkey里面包含ts的

import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.filter.SubstringComparator
import org.apache.hadoop.hbase.filter.RowFilter
scan 'test1', {FILTER => RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'), SubstringComparator.new('ts'))}
 
ROW                          COLUMN+CELL
 user1|ts1                   column=sf:c1, timestamp=1409122354868, value=sku1
 user1|ts2                   column=sf:c1, timestamp=1409122354918, value=sku188
 user1|ts3                   column=sf:s1, timestamp=1409122354954, value=sku123
 user2|ts4                   column=sf:c1, timestamp=1409122354998, value=sku2
 user2|ts5                   column=sf:c2, timestamp=1409122355030, value=sku288
 user2|ts6                   column=sf:s1, timestamp=1409122355970, value=sku222

 

加入一条测试数据

put 'test1', 'user2|err', 'sf:s1', 'sku999'

查询rowkey里面以user开头的,新加入的测试数据并不符合正则表达式的规则,故查询不出来

import org.apache.hadoop.hbase.filter.RegexStringComparator
import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.filter.SubstringComparator
import org.apache.hadoop.hbase.filter.RowFilter
scan 'test1', {FILTER => RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'),RegexStringComparator.new('^user\d+\|ts\d+$'))}

ROW                          COLUMN+CELL
 user1|ts1                   column=sf:c1, timestamp=1409122354868, value=sku1
 user1|ts2                   column=sf:c1, timestamp=1409122354918, value=sku188
 user1|ts3                   column=sf:s1, timestamp=1409122354954, value=sku123
 user2|ts4                   column=sf:c1, timestamp=1409122354998, value=sku2
 user2|ts5                   column=sf:c2, timestamp=1409122355030, value=sku288
 user2|ts6                   column=sf:s1, timestamp=1409122355970, value=sku222

加入测试数据

put 'test1', 'user1|ts9', 'sf:b1', 'sku1'

b1开头的列中并且值为sku1的

scan 'test1', FILTER=>"ColumnPrefixFilter('b1') AND ValueFilter(=,'binary:sku1')"
 
ROW                          COLUMN+CELL                                                                       
 user1|ts9                   column=sf:b1, timestamp=1409124908668, value=sku1

SingleColumnValueFilter的使用,b1开头的列中并且值为sku1的

import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter
import org.apache.hadoop.hbase.filter.SubstringComparator
scan 'test1', {COLUMNS => 'sf:b1', FILTER => SingleColumnValueFilter.new(Bytes.toBytes('sf'), Bytes.toBytes('b1'), CompareFilter::CompareOp.valueOf('EQUAL'), Bytes.toBytes('sku1'))}
 
ROW                          COLUMN+CELL
 user1|ts9                   column=sf:b1, timestamp=1409124908668, value=sku1

hbase zkcli 的使用

hbase zkcli
ls /
[hbase, zookeeper]
 
[zk: hadoop000:2181(CONNECTED) 1] ls /hbase
[meta-region-server, backup-masters, table, draining, region-in-transition, running, table-lock, master, namespace, hbaseid, online-snapshot, replication, splitWAL, recovering-regions, rs]
 
[zk: hadoop000:2181(CONNECTED) 2] ls /hbase/table
[member, test1, hbase:meta, hbase:namespace]
 
[zk: hadoop000:2181(CONNECTED) 3] ls /hbase/table/test1
[]
 
[zk: hadoop000:2181(CONNECTED) 4] get /hbase/table/test1
?master:60000}l$??lPBUF
cZxid = 0x107
ctime = Wed Aug 27 14:52:21 HKT 2014
mZxid = 0x10b
mtime = Wed Aug 27 14:52:22 HKT 2014
pZxid = 0x107
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 31
numChildren = 0

 

 ...

分享到:
评论

相关推荐

    实验三:熟悉常用的HBase操作

    此外,HBase还支持基于行键和时间戳的查询,以及复杂的过滤器操作。例如,你可以使用`get`命令获取特定行键的数据,或者通过定义过滤器来筛选满足特定条件的数据。 总的来说,实验三旨在使你熟悉HBase的基本操作,...

    hbase的shell操作

    根据提供的文件信息,本文将详细介绍HBase的Shell操作及其应用场景,包括如何创建表、插入数据、查询数据等关键操作。 ### HBase Shell简介 HBase Shell是HBase提供的一种交互式命令行工具,用于执行HBase操作。它...

    Hbase shell及常用命令

    HBase过滤器可以根据条件过滤数据。例如,使用RowFilter过滤器来过滤Student表中的数据: scan 'Student', FILTER => "RowFilter(=, 'binary:0001')" HBase行键过滤器 ------------------ HBase行键过滤器用于...

    hbase_shell操作命令汇总

    这些是HBase Shell中最基础且最常用的命令。在实际使用中,你可能还需要了解更多的命令,如`list`(列出所有表)、`compact`(压缩表数据)等,以及更复杂的过滤和操作选项。熟练掌握这些命令将有助于你高效地管理和...

    Hadoop学习四十二:HBase 过滤器

    HBase过滤器允许我们在读取数据时对结果进行筛选,减少不必要的I/O操作,从而提高效率。它们是通过实现`Filter`接口来定义的,并在扫描器(Scanner)执行时应用。HBase提供了多种内置过滤器,如...

    hbase基本概念和hbase shell常用命令用法

    以上只是HBase Shell的一些基础操作,实际使用中还会有更多高级功能,如批量操作、过滤器等,这些都需要根据具体场景进行学习和掌握。 在HBase的运维中,理解其内部工作原理,如RegionServer、Zookeeper的角色,...

    hbase shell

    - `BLOOMFILTER`:布隆过滤器的类型。 - `REPLICATION_SCOPE`:复制范围。 - `COMPRESSION`:压缩算法。 - `VERSIONS`:版本数。 - `TTL`:数据生存时间。 - `BLOCKSIZE`:块大小。 - `IN_MEMORY`:是否将数据缓存在...

    hbase shell命令详解

    以上只是HBase Shell常用的一些命令,实际上还有更多高级操作,如过滤器、性能调优等。熟练掌握这些命令,将有助于更好地管理和维护HBase数据库。在实际工作中,根据具体需求,结合HBase的API和Shell,可以实现各种...

    HBase基本操作.pdf

    HBase提供了易用的Shell命令行接口进行数据库操作,以下是基于提供的文件内容的详细知识点: ### HBase Shell命令基本操作步骤 #### 1. 启动HBase Shell 首先需要确保HBase服务已启动。在命令行输入`hbase shell`...

    实验三:熟悉常用的HBase操作.docx.zip

    "实验三:熟悉常用的HBase操作.docx.zip" 这个标题表明这是一个关于HBase操作的学习实验,主要目标是帮助用户熟悉HBase的常用操作。HBase是一个分布式、版本化的NoSQL数据库,它构建在Hadoop文件系统(HDFS)之上,...

    hbase常用JAVA API

    可以设置开始和结束行键,过滤器等。 ```java Scan scan = new Scan(); ResultScanner scanner = table.getScanner(scan); for (Result res : scanner) { // 处理每一行结果 } scanner.close(); ``` 6. **...

    hbase的操作数据demo

    如果需要按条件过滤数据,可以使用布林表达式或者自定义过滤器。 数据的插入操作通常涉及`put`命令,它将数据写入指定行和列。例如,`put 'table', 'rowkey', 'cf:qualifier', 'value'`会将值''value''写入表'table...

    Hbase+Spring boot实战分布式文件存储

    3-1 HBase写流程 3-2 HBase读流程 3-3 HBase模块协作 3-4 HBase实战:Shell命令实战 3-5 HBase实 战:Java Api实现HBase连接类 3-6 HBase实战:Java Api实现HBase操作类 3-7 HBase实战:用过滤器筛选数据 3-8 HBase...

    hbase-2.4.17-bin 安装包

    3. 查询数据:`get '表名', '行键'`获取整行数据,或`scan '表名'`进行全表扫描,可以指定过滤器等条件。 4. 删除数据:`delete '表名', '行键', '列族:列限定符', [时间戳]`删除特定单元格,可选时间戳指定版本。 ...

    hbase的hbase-1.2.0-cdh5.14.2.tar.gz资源包

    5. **客户端连接**:HBase提供了命令行接口(HBase Shell)和Java API,可以用来交互式操作HBase或在应用程序中集成。 ### HBase的数据模型和操作 1. **创建表**:使用`create`命令创建表,指定列族。 2. **插入...

    hbase-1.6.0-bin.tar.gz

    7. **HBase Shell增强**:HBase Shell是管理系统的重要工具,1.6.0版本增强了Shell命令的功能,添加了更多实用操作,如批量修改表属性、检查Region状态等。 8. **与其他组件的集成**:HBase 1.6.0可以很好地与...

    hbase-2.4.11-bin.tar.gz

    7. **性能优化**:HBase提供了多种优化策略,如表分区、布隆过滤器、压缩等,可以根据实际场景调整以提升性能。 8. **安全性**:HBase支持Kerberos认证,可以实现安全的集群环境。同时,可以利用Hadoop的权限管理来...

Global site tag (gtag.js) - Google Analytics