1

HBase テーブルに byte[] を rowKey として配置しました。ここで、使用したバイトに基づいて行を取得できるようにしたいと考えています。HBase シェルを使用する場合は、次のようにします。

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 を構成するバイトに基づいて行をフェッチする方法はありますか?

4

1 に答える 1

0

確かにエンコーディングの問題のようです。REST クライアントのソースを見ると、次のように呼び出されます。

Bytes.toStringBinary()

次の形式の 16 進文字列を生成するキー バイトに対して:

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

文字列を URL エンコードするようには見えず、「\」が httpclient の問題を引き起こしている可能性があります。この場合、hbase レスト クライアントのバグである可能性があります。hbase の新しいバージョンでこれが修正された可能性があります。

于 2012-08-06T15:37:27.350 に答える