fuzzyrowfilter 查询不到数据

项目环境:

 

 

Hbase

Spark

服务器

1.1.2.2.6.1.0-129

2.1.1

本地

1.1.2

2.0.0

 

问题:
使用Intellij在本地开发环境查询hbase中的数据,用prefixFilter,RegexStringComparator,SubstringComparator等过滤条件均可以查询,但是使用类fuzzyrowfilter查询不到。
 
解决过程:
首先其他的filter类可以查询,只有模糊查询不能够查询;考虑到利用上述几种过滤条件的组合查询,但是除了前缀过滤器效率高外,其余的过滤器均是逐个匹配的,效率应该会慢。
然后考虑到可能服务器的安装的hbase不支持模糊查询,网上找到资料hbase 0.9x版本的已经开始使用hbase的模糊查询了,而我们使用的版本是1.1.2.2.6,应该支持。所以在hbase shell命令窗口中进行了模糊查询(模糊查询命令介绍),安装的hbase版本确实能够进行模糊查询。
后面考虑到可能是本地编译的环境有问题,将代码上传到服务器进行编译,但是编译需要很多的包,所以没有编译成功。
服务器上大版本和本地开发的大版本是一致的,小版本不一致,而且在网上也找不到和服务器上版本一致的jar,感觉是可能是jar的问题,最后将服务器上的jar包拉取到本地,在本地的maven环境中导入本地的jar包后,结果可以成功打印出来了。
 
hbase shell 模糊查询的例子

scan 'blog', FILTER => org.apache.hadoop.hbase.filter.FuzzyRowFilter.new(Arrays.asList(Pair.new(Bytes.toBytes("00?"),Bytes.toBytes("\x00\x00\x01"))))

 
scan ‘tablename’,过滤条件
过滤条件中new对象的方式
org.apache.hadoop.hbase.filter.FuzzyRowFilter.new()
Pair.new中的参数
第一个参数Bytes.toBytes("00?")代表rowkey,”?”代表模糊匹配中不用匹配项

第二个参数Bytes.toBytes("\x00\x00\x01") \x00代表0,与前面的对应的为序匹配

FuzzyRowFilter用法参考链接 http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/filter/FuzzyRowFilter.html

 

 

从服务器上拉取下来的包有

hbase-client-1.1.2.2.6.1.0-129.jar
        hbase-common-1.1.2.2.6.1.0-129.jar
        htrace-core-3.1.0-incubating.jar
        hbase-protocol-1.1.2.2.6.1.0-129.jar
        hbase-server-1.1.2.2.6.1.0-129.jar
然后在maven中导入本地的这5个jar包
<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-server</artifactId>
    <version>1.1.2</version>
    <scope>system</scope>
    <systemPath>E:/1.1.2.2.6.1.0-129/hbase-server-1.1.2.2.6.1.0-129.jar</systemPath>
</dependency>
即可运行了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值