hbase休息客户端获取

时间:2012-08-05 00:24:31

标签: get hbase

我已将byte []作为rowKey放在HBase表中。现在我希望能够根据我使用的字节检索行。如果我使用HBase shell,我会执行以下操作:

get 'table', "\x12\x00\x00\x00\x03\x03" and it works fine.

现在我想在使用其余客户端的Java类GetMyRow.java中获取该行。 我的代码如下所示:

byte[] rowKey = new byte[6];
rowKey[0] = 0x12;
rowKey[1] = 0x00;
rowKey[2] = 0x00;
rowKey[3] = 0x00;
rowKey[4] = 0x03;
rowKey[5] = 0x03;
Get g = new Get(rowKey);
Result r = table.get(g);

我收到以下错误:

org.apache.commons.httpclient.URIException: escaped absolute path not valid
    at org.apache.commons.httpclient.URI.setRawPath(URI.java:2837)
    at org.apache.commons.httpclient.URI.parseUriReference(URI.java:2023)
    at org.apache.commons.httpclient.URI.<init>(URI.java:167)
    at org.apache.hadoop.hbase.rest.client.Client.executePathOnly(Client.java:115)
    at org.apache.hadoop.hbase.rest.client.Client.execute(Client.java:164)
    at org.apache.hadoop.hbase.rest.client.Client.get(Client.java:284)
    at org.apache.hadoop.hbase.rest.client.Client.get(Client.java:257)
    at org.apache.hadoop.hbase.rest.client.Client.get(Client.java:242)
    at org.apache.hadoop.hbase.rest.client.RemoteHTable.get(RemoteHTable.java:267)
    at udf.HBaseConnector.main(GetMyRow.java:74)

有关如何根据构成rowKey的字节获取行的任何想法吗?

1 个答案:

答案 0 :(得分:0)

当然看起来像编码问题。查看REST客户端的源代码,它最终会调用:

Bytes.toStringBinary()

在关键字节上产生以下形式的十六进制字符串:

\x12\x00\x00\x00\x03\x03

它看起来不像url编码字符串,也许“\”导致httpclient问题。如果是这种情况,则可能是hbase rest客户端中的错误。可能以后的版本的hbase已经解决了这个问题。