【问题标题】:HBASE Rest API (Stargate) Post multiple cells / rowsHBASE Rest API (Stargate) 发布多个单元格/行
【发布时间】:2013-01-14 21:33:40
【问题描述】:

我正在尝试使用其余 api 将多个列/行发布到我的 hbase 集群。我可以一次发布 1 列而不会遇到麻烦,但似乎无法让它接受多列/多行。

这很好用

数据:

{
   "Row":{
      "@key":"www.somesite.com",
      "Cell":{
         "@column":"ColFam:Col1",
         "$":"someData"
      }
   }
}

呼叫:

curl -v -X PUT -H "Content-Type: application/json" --data '{"Row": { "@key":"www.somesite.com", "Cell": { "@column":"ColFam:Col1", "$":"someData" } } }' http://somesite.com:8080/TestTable/www.somesite.com/ColFam:Col1

根据api,我应该可以同时发布多行/多列。

多列数据:

{
   "Row":
      {
         "key":"www.somesite.com",
         "Cell":[
            {
               "column":"ColFam:Col1",
               "$":"someData"
            },
            {
               "column":"ColFam:Col2",
               "$":"moreData"
            }
         ]
      }
}

多行数据:

{
   "Row":[
      {
         "key":"www.somesite.com",
         "Cell":[
            {
               "column":"ColFam:Col1",
               "$":"someData"
            }
         ]
      },
      {
         "key":"www.someothersite.com",
         "Cell":[
            {
               "column":"ColFam:Col1",
               "$":"moreData"
            }
         ]
      }

   ]
}

我尝试使用以下网址:

http://somesite.com:8080/TestTable/www.somesite.com/ColFam:Col1
http://somesite.com:8080/TestTable/www.somesite.com/ColFam
http://somesite.com:8080/TestTable/www.somesite.com

无济于事。文档说要使用 false-row-key,所以我也尝试过:

http://somesite.com:8080/TestTable/false-row-key

还是没有运气。

我每次都遇到同样的错误:

upload completely sent off: 124 out of 124 bytes
HTTP/1.1 503 Service Unavailable

有什么想法吗?

【问题讨论】:

  • 您能帮忙吗?我试图通过使用多个列的 PUT 来实现相同的目标并获得 200OK 但消息正文响应是“未定义”。我应该期待什么样的回应?

标签: hbase stargate


【解决方案1】:

所以你所要做的就是对所有的 json 值进行 base64 编码。

{
   "Row":[
      {
         "key":"d3d3LnNvbWVzaXRlLmNvbQ==",
         "Cell":[
            {
               "column":"QXV0aG9yczp0ZXN0MQ==",
               "$":"c29tZURhdGE="
            },
            {
               "column":"QXV0aG9yczp0ZXN0Mg==",
               "$":"bW9yZURhdGE="
            }
         ]
      }
   ]
}

这对我来说应该很明显,因为其余 api 的返回值都是 base64 编码的。

【讨论】:

  • 我不清楚端点 URL 到底是什么。我没有运气就尝试了上述有效负载。任何人都可以为多行/列有效负载发布正确的端点吗?
【解决方案2】:

JIRA HBASE-9435 给出了这个答案。 需要去掉'@',加上'[]',命令如下:

curl -v -X PUT -H "Content-Type: application/json" --data '{"Row":[{"key":"www.somesite.com", "Cell": [{"column":"ColFam:Col1", "$":"someData"}]}]}' http://somesite.com:8080/TestTable/www.somesite.com/ColFam:Col1

此外,“www.somesite.com”、“ColFam:Col1”、“someData”的值需要进行 base64 编码。

【讨论】:

    猜你喜欢
    • 2015-10-11
    • 2012-06-10
    • 2014-09-04
    • 2012-04-17
    • 2012-08-06
    • 2012-12-01
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多