Java 不使用字节的无HBase筛选器

Java 不使用字节的无HBase筛选器,java,hbase,Java,Hbase,我正在尝试在HBase查询服务中实现一些功能,我将允许用户使用CompareOp.LESS操作符查询保证的“数字”字段。以下是我使用的过滤器示例: new SingleColumnValueFilter( Bytes.toBytes("TG-SMA"), Bytes.toBytes("publishdate"), CompareOp.LESS, Bytes.toBytes("20131201013434")); 最初,我的最后一个参数是 新的二进制比较器(B

我正在尝试在HBase查询服务中实现一些功能,我将允许用户使用
CompareOp.LESS
操作符查询保证的“数字”字段。以下是我使用的过滤器示例:

new SingleColumnValueFilter(
    Bytes.toBytes("TG-SMA"), 
    Bytes.toBytes("publishdate"),
    CompareOp.LESS, 
    Bytes.toBytes("20131201013434"));
最初,我的最后一个参数是

新的二进制比较器(Bytes.toBytes(“201312013434”))

但这种行为没有改变。我在日志中得到的结果是:

org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=10, exceptions:
Thu Dec 05 10:26:33 EST 2013, org.apache.hadoop.hbase.client.ScannerCallable@69822390, java.lang.NullPointerException
Thu Dec 05 10:26:34 EST 2013, org.apache.hadoop.hbase.client.ScannerCallable@69822390, java.lang.NullPointerException
Thu Dec 05 10:26:35 EST 2013, org.apache.hadoop.hbase.client.ScannerCallable@69822390, java.lang.NullPointerException
Thu Dec 05 10:26:36 EST 2013, org.apache.hadoop.hbase.client.ScannerCallable@69822390, java.lang.NullPointerException
Thu Dec 05 10:26:38 EST 2013, org.apache.hadoop.hbase.client.ScannerCallable@69822390, java.lang.NullPointerException
Thu Dec 05 10:26:40 EST 2013, org.apache.hadoop.hbase.client.ScannerCallable@69822390, java.lang.NullPointerException
Thu Dec 05 10:26:44 EST 2013, org.apache.hadoop.hbase.client.ScannerCallable@69822390, java.lang.NullPointerException
Thu Dec 05 10:26:48 EST 2013, org.apache.hadoop.hbase.client.ScannerCallable@69822390, java.lang.NullPointerException
Thu Dec 05 10:26:56 EST 2013, org.apache.hadoop.hbase.client.ScannerCallable@69822390, java.lang.NullPointerException
Thu Dec 05 10:27:12 EST 2013, org.apache.hadoop.hbase.client.ScannerCallable@69822390, java.lang.NullPointerException

        at org.apache.hadoop.hbase.client.ServerCallable.withRetries(ServerCallable.java:183)
        at org.apache.hadoop.hbase.client.ClientScanner.nextScanner(ClientScanner.java:205)
        at org.apache.hadoop.hbase.client.ClientScanner.<init>(ClientScanner.java:120)
        at org.apache.hadoop.hbase.client.HTable.getScanner(HTable.java:665)
如果我没有第一个过滤器,那么我会得到正确的结果。我还可以将此
RegexStringComparator
CompareOp.EQUAL
对象用于第一个过滤器中的“publishdate”字段,并获得正确的结果

按照代码的工作方式,用户可以添加多个过滤器来查询不同的列/值。目前,只实现了这两种过滤器类型,只有第二种过滤器有效(第一种过滤器失败,粘贴错误日志,不管它是否是唯一的过滤器)

我还读过关于实现我自己的自定义
Comparator/Comparable
扩展的内容,但我认为我不允许修改HBase环境(这将适用于零售产品),实现自定义类需要部署到HBase实例


如果有人知道我为什么会看到这些错误,那就太棒了,解决了很多麻烦。提前谢谢。

别客气。事实证明,字段在提交到HBase之前是被序列化的,当
二进制比较器尝试对其进行解码时,它会在一个空字符上中断。我将把这个答案留在这里,因为我从来没有在互联网上找到过答案,所以希望这能帮你省下一个星期的兔子洞


修复方法是通过相同的序列化过程运行查询值,不管最终是什么。事实证明,字段在提交到HBase之前是被序列化的,当
二进制比较器尝试对其进行解码时,它会在一个空字符上中断。我将把这个答案留在这里,因为我从来没有在互联网上找到过答案,所以希望这能帮你省下一个星期的兔子洞

修复方法是通过相同的序列化过程运行查询值,不管最终结果如何

new SingleColumnValueFilter(
    Bytes.toBytes("TG-SMA"), 
    Bytes.toBytes("title"),
    CompareOp.EQUAL, 
    new RegexStringComparator("This" + "\\.*"));