Java HBase FuzzyRowFilter不返回任何结果
我很难让HBase的Java HBase FuzzyRowFilter不返回任何结果,java,macos,scala,hbase,Java,Macos,Scala,Hbase,我很难让HBase的FuzzyRowFilter正常工作 我有以下测试表: hbase(main):014:0> scan 'test' ROW COLUMN+CELL row-01 column=colfam1:col1, timestamp=1481193793338, value=value1 row-02
FuzzyRowFilter
正常工作
我有以下测试表:
hbase(main):014:0> scan 'test'
ROW COLUMN+CELL
row-01 column=colfam1:col1, timestamp=1481193793338, value=value1
row-02 column=colfam1:col1, timestamp=1481193799186, value=value2
row-03 column=colfam1:col1, timestamp=1481193803941, value=value3
row-04 column=colfam1:col1, timestamp=1481193808209, value=value4
row-05 column=colfam1:col1, timestamp=1481193812737, value=value5
5 row(s) in 0.0200 seconds
这是我的Java代码(我从Scala开始,但结果是一样的-无):
我做错什么了吗?HBase(版本1.2.2)中是否存在错误?我正在使用最新Mac OS Sierra上通过自制安装的版本
更新
在运行带有HBase 1.2.0-cdh5.7.0的CDH 5.7的Cloudera Hadoop集群上,我获得了rowkeyrow-01
所需的输出。该错误一定与我的本地设置有关
解决方案
事实上,问题在于HBase服务器安装和客户端JAR版本不匹配。在我的例子中,我使用的是人工制品
- hbase通用
- hbase客户端
- hbase服务器
1.2.0-cdh5.7.0
而不是1.2.2
我的错误是假设较小的版本差异不会产生很大的影响,但显然Cloudera在其版本中对官方代码库应用了一些重大更改。更改为官方版本
1.2.2
使FuzzyRowFilter
按预期工作。它应该只打印第01行的行键,这可以从过滤条件中看出。
没有这样的错误,它会像预期的那样工作,因为我已经使用了一段时间了。
检查您的配置、依赖项等。
由于版本控制,很多时候库和它们的客户机是不兼容的。
让我们举一个简单的例子:
class ServerVersionA {
public static void getData() {
return DataOject(data with headerVersionA);
}
}
}
在这种情况下,如果报头不匹配,客户机就会处于空闲状态。
这类问题大部分都得到了解决,但有时它们会悄悄出现。
如果我们查看安装源和客户端版本,我们可以找到为什么不返回数据,也不传播异常。很高兴听到您使用了过滤器。但是您不同意HBase服务器的行为很奇怪吗?如果依赖项或配置不匹配,服务器不应该报告错误而不是返回空结果吗?无论如何,我会很高兴得到解决我问题的具体提示。在大多数情况下都是这样,但在版本不匹配(jar和安装)的情况下,它不会执行任何操作,甚至不会发出警告。例如,您可以参考[link]()看看问题和解决方案。如果仍然出现错误,可以向我发送有关hbase下载链接和pom或类路径变量的信息。没错,问题是使用Cloudera repo的hbase JAR。使用官方JAR和匹配版本解决了我的问题。如果jar版本不匹配,您能否在回答中包含您对NoOps的评论?那么我会接受它作为正确答案。投票人是否愿意解释他为什么投票否决我的问题?我相信它清楚地说明了问题以及我以前解决问题的尝试。
keyvalues={row-01/colfam1:col1/1481193793338/Put/vlen=6/seqid=0}
keyvalues={row-02/colfam1:col1/1481193799186/Put/vlen=6/seqid=0}
keyvalues={row-03/colfam1:col1/1481193803941/Put/vlen=6/seqid=0}
keyvalues={row-04/colfam1:col1/1481193808209/Put/vlen=6/seqid=0}
class ServerVersionA {
public static void getData() {
return DataOject(data with headerVersionA);
}
class ClientVersionB {
public void showData() {
DataObject dataObject = makeRequest(params);
//Check whether data recieved is of version B after veryfying header boolean status=validate(dataObject);
if (status) {
doIO(dataObject);
}
}