HBASE Rest API (Stargate) 发布多个单元格/行
Posted
技术标签:
【中文标题】HBASE Rest API (Stargate) 发布多个单元格/行【英文标题】:HBASE Rest API (Stargate) Post multiple cells / rows 【发布时间】: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 但消息正文响应是“未定义”。我应该期待什么样的回应? 【参考方案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 编码。
【讨论】:
以上是关于HBASE Rest API (Stargate) 发布多个单元格/行的主要内容,如果未能解决你的问题,请参考以下文章
markdown HBase Stargate REST API扫描程序筛选器示例
如何使用 Stargate REST API 在 HBase 中构建更复杂的过滤器层次结构?
Stargate REST API 是不是支持 LIMIT 子句?