【问题标题】:hbase rest client gethbase 休息客户端获取
【发布时间】:2012-08-05 00:24:31
【问题描述】:

我已将 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 的字节获取行?

【问题讨论】:

  • 哪个版本的hbase?如果您使用只有可打印字符的密钥,您是否能够使其工作?
  • 是的,它适用于所有其他数据类型。
  • 我使用的是 HBase 版本 0.90.4-cdh3u3。

标签: get hbase


【解决方案1】:

看起来肯定是编码问题。查看 REST 客户端的源代码,它最终调用:

Bytes.toStringBinary()

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

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

看起来它从来没有对字符串进行 url 编码,也许“\”会导致 httpclient 出现问题。如果是这种情况,很可能是 hbase REST 客户端中的一个错误。可能是更高版本的 hbase 已修复此问题。

【讨论】:

  • 我从使用 RemoteHTable 切换到 HTable,现在可以正常使用了。
  • 如果您的客户可以访问您的整个集群,这是一个选项
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 2014-02-12
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多