【问题标题】:How to delete an HBase cell with a binary rowkey through REST api?如何通过 REST api 删除带有二进制行键的 HBase 单元格?
【发布时间】:2015-08-02 20:59:54
【问题描述】:

通过 REST api 删除 HBase 单元的路径是/<table>/<row>/<column>:<qualifier>。如果 rowkey 是一个字符串,比如“Hello”,它就可以工作。但是当 rowkey 是二进制数据(例如,180 的整数)时,我应该如何对 rowkey 进行编码?我尝试对 rowkey 进行 base64 编码,得到状态码 200,但该单元格根本没有被删除。

例子:

我尝试通过向路径http://ecs5.njzd.com:20550/X/ZAAAAA==/C:c1 发送DELETE 请求来删除单元格,其中ecs5.njzd.com:20550 是HBase REST 服务器的主机名和端口,X 是表的名称,ZAAAAA== 是rowkey 100 (int) 的 based64 解码值,C:c1 是列名。我收到状态代码为 200 的响应,但该单元格仍然存在于表格中。

【问题讨论】:

  • 你能粘贴你的hbase表的smaple扫描输出吗?

标签: rest hbase


【解决方案1】:

我只是尝试了下面的命令,它对我有用。您不要在删除查询中发送 base64 编码数据。

curl -v -X DELETE "Content-Type: text/xml" http://hostname:port/testtable/10101/colfam1:col1

如果它不起作用,则粘贴表的 hbase 扫描输出,这将提供有关准备删除查询的想法。

【讨论】:

  • 必须在“Content-Type...”之前放置“-H”
【解决方案2】:

删除并不像 put 或 get 那样直接。这取决于主要压缩、基于版本、基于时间戳、自动刷新等。所以当你说你看到它回来时,请同时验证这些设置。正如@Shashi 所说,模式本身是在 Rest API 中为删除定义的,用编码处理它,所以你不需要发送编码数据

【讨论】:

    【解决方案3】:

    正确的做法是把rowkey写成对应字节数组的十六进制转义表示。例如,当 rowkey 是整数 100 时,我应该将 rowkey 写为 d\x00\x00\x00,这是整数 100 的十六进制转义表示。

    实际上,当您在 HBase shell 中扫描表时,如果 rowkey 或 value 不是字符串,您将看到相同的结果。

    【讨论】:

      猜你喜欢
      • 2013-01-14
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      • 2020-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多