项目环境:
| 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>
即可运行了。