HBase Restful接口文档
由于毕设使用, 对HBase文档相关章节进行汉化, 用于学习, 有语句不通顺或者使用上的其他问题, 请访问官网原文
使用 REST Endpoints
以下示例以服务器 http://example.com:8000 为例, 示例可以使用curl
和wget
命令在终端中运行.
你可以通过添加不同的请求头来请求不同类型的数据
类型 | 请求头 |
---|---|
纯文本(默认) | 不添加 |
XML | “Accept: text/xml” |
JSON | “Accept: application/json” |
protocol buffers | “Accept: application/x-protobuf” |
除非特殊情况, GET
请求一般用于查询, PUT
和POST
请求用于创建或修改, DELETE
请求用于删除.
- 集群相关信息
Endpoint HTTP请求方法 说明 示例 /version/cluster
GET
该集群运行HBase的版本 curl -vi -X GET -H "Accept: text/xml" "http://example.com:8000/version/cluster"
/status/cluster
GET
集群状态 curl -vi -X GET -H "Accept: text/xml" "http://example.com:8000/status/cluster"
/
GET
列出所有非系统的表 curl -vi -X GET -H "Accept: text/xml" "http://example.com:8000/"
- 命名空间
Endpoint HTTP请求方法 说明 示例 /namespaces
GET
列出所有命名空间 curl -vi -X GET -H "Accept: text/xml" "http://example.com:8000/namespaces/"
/namespaces/$(namespace)
GET
获取该命名空间详细信息 curl -vi -X GET -H "Accept: text/xml" "http://example.com:8000/namespaces/special_ns"
/namespaces/$(namespace)
POST
创建一个新的命名空间 curl -vi -X POST -H "Accept: text/xml" "http://example.com:8000/namespaces/special_ns"
/namespaces/$(namespace)/tables
GET
列出该命名空间下的全部表 curl -vi -X GET -H "Accept: text/xml" "http://example.com:8000/namespaces/special_ns/tables"
/namespaces/$(namespace)
PUT
更改该已存在的命名空间, 目前无效 curl -vi -X PUT -H "Accept: text/xml" "http://example.com:8000/namespaces/special_ns
/namespaces/$(namespace)
DELETE
删除该命名空间 curl -vi -X DELETE -H "Accept: text/xml" "http://example.com:8000/namespaces/special_ns"
- 表
Endpoint HTTP请求方法 说明 示例 /$(table)/schema
GET
获取该表的schema的详细信息 curl -vi -X GET -H "Accept: text/xml" "http://example.com:8000/users/schema"
/$(table)/schema
POST
使用提供的schema片段更新该表的schema curl -vi -X POST -H "Accept: text/xml" -H "Content-Type: text/xml" -d '<?xml version="1.0" encoding="UTF-8"?><TableSchema name="users"><ColumnSchema name="cf" KEEP_DELETED_CELLS="true" /></TableSchema>' "http://example.com:8000/users/schema"
/$(table)/schema
PUT
创建一个新表或者使用提供的schema代替已存在的表的schema curl -vi -X PUT -H "Accept: text/xml" -H "Content-Type: text/xml" -d '<?xml version="1.0" encoding="UTF-8"?><TableSchema name="users"><ColumnSchema name="cf" /></TableSchema>' "http://example.com:8000/users/schema"
/$(table)/schema
DELETE
删除该表 curl -vi -X DELETE -H "Accept: text/xml" "http://example.com:8000/users/schema"
/$(table)/regions
GET
列出该表使用的regions服务器 curl -vi -X GET -H "Accept: text/xml" "http://example.com:8000/users/regions
- 提示: 如果表位于命名空间下, 则使用
${namespace}:${table}
替换上文中的${table}
, 下文同
- Get操作
Endpoint HTTP请求方法 说明 示例 /$(table)/$(row)
GET
获取该行的所有列信息, 值使用Base64编码, 可以为请求添加Accept头来获取对应格式(比如xml, json, protobuf) curl -vi -X GET -H "Accept: text/xml" "http://example.com:8000/users/row1"
/$(table)/$(row)/$(column:qualifier)/$(timestamp)
GET
获取该行的指定列信息, 值使用Base64编码 curl -vi -X GET -H "Accept: text/xml" "http://example.com:8000/users/row1/cf:a/1458586888395"
/$(table)/$(row)/$(column:qualifier)
GET
获取该行的指定列信息, 值使用Base64编码 curl -vi -X GET -H "Accept: text/xml" "http://example.com:8000/users/row1/cf:a"
/$(table)/$(row)/$(column:qualifier)/?v=$(number_of_versions)
GET
获取该行的指定列最后n次提交的信息, 值使用Base64编码 curl -vi -X GET -H "Accept: text/xml" "http://example.com:8000/users/row1/cf:a?v=2"
- Scan操作
Endpoint HTTP请求方法 说明 示例 /$(table)/scanner/
PUT
获取一个Scanner对象, 其他所有Scan操作都需要该Scanner对象, batch是在Scan中每批返回的行数.
参看下一个例子以了解如何为Scanner增加过滤器.
Scanner的endpoint会在Http响应中作为Location字段返回.
表格中其他示例都以http://example.com:8000/users/scanner/145869072824375522207
作为Scanner的endpoint为例.curl -vi -X PUT -H "Accept: text/xml" -H "Content-Type: text/xml" -d '<Scanner batch="1"/>' "http://example.com:8000/users/scanner/"
/$(table)/scanner/
PUT
如果需要让Scanner对象支持过滤器或者想要配置Scanner对象的其他属性, 你可以创建一个文本文件并在其中添加你的过滤器.
举例来说, 如果想返回键以u123开头的行, 并且将batch设为100, 过滤器文件应当设定为如下的样子<Scanner batch="100"><filter>{ "type": "PrefixFilter", "value": "u123" }</filter></Scanner>
curl -vi -X PUT -H "Accept: text/xml" -H "Content-Type:text/xml" -d @filter.txt "http://example.com:8000/users/scanner/"
/$(table)/scanner/$(scanner-id)
GET
从Scanner获取下一批数据, 单元格的值是字节编码的, 如果Scanner的已经没有更多数据, 将会返回一个HTTP状态 204
.curl -vi -X GET -H "Accept: text/xml" "http://example.com:8000/users/scanner/145869072824375522207"
$(table)/scanner/$(scanner-id)
DELETE
删除对应的Scanner并其所占用的资源 curl -vi -X DELETE -H "Accept: text/xml" "http://example.com:8000/users/scanner/145869072824375522207"
- Put操作
Endpoint HTTP请求方法 说明 示例 /$(table)/$(row_key)
PUT
向表写一入行. 行, 列, 值必须使用Base64编码.
可以在终端中使用base64
命令来对字符串进行编码或者解码.
请求的负载在curl的--data
参数,/users/fakerow
是示例的表和行键.
在<CellSet>
中添加更多元素来插入多行数据.
你也可以将要插入的数据保存到文件中, 然后通过-d
参数传递他, 比如-d @filename.txt
.curl -vi -X PUT -H "Accept: text/xml" -H "Content-Type: text/xml" -d '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><CellSet><Row key="cm93NQo="><Cell column="Y2Y6ZQo=">dmFsdWU1Cg==</Cell></Row></CellSet>' "http://example.com:8000/users/fakerow"
curl -vi -X PUT -H "Accept: application/json" -H "Content-Type: application/json" -d '{"Row":[{"key":"cm93NQo=", "Cell": [{"column":"Y2Y6ZQo=", "$":"dmFsdWU1Cg=="}]}]}'' "example.com:8000/users/fakerow"
- Check-And-Put操作
Endpoint HTTP请求方法 说明 示例 /$(table)/$(row_key)/?check=put
PUT
条件插入 - 改变该单元格当前版本的值: 将该单元格当前/最终版本的值( current-version-value
)与check-value
进行比较, 如果current-version-value
与check-value
相等, 则将新数据(new-value
)写入到单元格的当前/最终版本中. 行, 列, 值必须使用Base64编码. 可以在终端中使用base64
命令来对字符串进行编码或者解码. 请求的负载在curl的--data
参数, 负载中要查询的单元格必须在最末尾, 而且正好在要插入的单元格后面, 查询的单元格和插入的单元格必须在同一行, 你也可以将要插入的数据保存到文件中, 然后通过-d
参数传递他, 比如-d @filename.txt
.curl -vi -X PUT -H "Accept: text/xml" -H "Content-Type: text/xml" -d '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><CellSet><Row key="cm93MQ=="><Cell column="Y2ZhOmFsaWFz">T2xkR3V5</Cell><Cell column="Y2ZhOmFsaWFz">TmV3R3V5</Cell></Row></CellSet>' "http://example.com:8000/users/row1/?check=put"
curl -vi -X PUT -H "Accept: application/json" -H "Content-Type: application/json" -d '{"Row":[{"key":"cm93MQ==","Cell":[{"column":"Y2ZhOmFsaWFz","$":"T2xkR3V5"},{"column":"Y2ZhOmFsaWFz", "$":"TmV3R3V5"}] }]}' "http://example.com:8000/users/row1/?check=put"
备注:
- 在json示例中:
-d
选项末尾的{"column":"Y2ZhOmFsaWFz", "$":"TmV3R3V5"}
是用Base64编码的查询的单元格名和值
,"Y2ZhOmFsaWFz"
是"cfa:alias"
,"TmV3R3V5"
是"NewGuy"
{"column":"Y2ZhOmFsaWFz","$":"T2xkR3V5"}
是用Base64编码的插入的单元格名和值
,"Y2ZhOmFsaWFz"
是"cfa:alias"
,"T2xkR3V5"
是"NewGuy"
"cm93MQ=="
是Base64编码后的"row1"
, 是查询/插入的行键
endpoint中的
"/?check=put"
是CheckAndPut请求的标志
URL里的行键
应当是URL编码的, 举个例子,"david%20chen"
和"row1"
是"david chen"
和"row1"
的URL编码提示: "cfa"是列族名, "alias"是列名, 他们都是非Base64编码的单元格名
- xml示例与json示例基本上相同, 此处不在多做解释.
- Check-And-Delete操作
Endpoint HTTP请求方法 说明 示例 /$(table)/$(row_key)/?check=delete
DELETE
条件删除某行数据: 将该单元格全部版本的值( any-version-value
)与check-value
进行比较, 如果any-version-value
与check-value
相等, URL中行键对应行删除. 查询用的行, 列, 值必须使用Base64编码. 可以在终端中使用base64
命令来对字符串进行编码或者解码. 请求的负载在curl的--data
参数, 你也可以将查询的数据保存到文件中, 然后通过-d
参数传递他, 比如-d @filename.txt
.curl -vi -X DELETE -H "Accept: text/xml" -H "Content-Type: text/xml" -d '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><CellSet><Row key="cm93MQ=="><Cell column="Y2ZhOmFsaWFz">TmV3R3V5</Cell></Row></CellSet>' "http://example.com:8000/users/row1/?check=delete"
curl -vi -X DELETE -H "Accept: application/json" -H "Content-Type: application/json" -d '{"Row":[{"key":"cm93MQ==","Cell":[{"column":"Y2ZhOmFsaWFz","$":"TmV3R3V5"}]}]}' "http://example.com:8000/users/row1/?check=delete"
/$(table)/$(row_key) /$(column_family) /?check=delete
DELETE
条件删除指定行的一个列族: 将该单元格全部版本的值( any-version-value
)与check-value
进行比较, 如果any-version-value
与check-value
相等, URL中行键对应行的对应列族删除. 其他与条件删除某行数据相同curl -vi -X DELETE -H "Accept: text/xml" -H "Content-Type: text/xml" -d '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><CellSet><Row key="cm93MQ=="><Cell column="Y2ZhOmFsaWFz">TmV3R3V5</Cell></Row></CellSet>' "http://example.com:8000/users/row1/cfa/?check=delete"
curl -vi -X DELETE -H "Accept: application/json" -H "Content-Type: application/json" -d '{"Row":[{"key":"cm93MQ==","Cell":[{"column":"Y2ZhOmFsaWFz","$":"TmV3R3V5"}]}]}' "http://example.com:8000/users/row1/cfa/?check=delete"
/$(table)/$(row_key) /$(column:qualifier) /?check=delete
DELETE
条件删除指定行列的全部版本: 将该单元格全部版本的值( any-version-value
)与check-value
进行比较, 如果any-version-value
与check-value
相等, 将URL中row_key/column:qualifier
对应行的对应列删除, 其中column:qualifier
的形式是column_family:column_name
. 其他与条件删除某行数据相同curl -vi -X DELETE -H "Accept: text/xml" -H "Content-Type: text/xml" -d '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><CellSet><Row key="cm93MQ=="><Cell column="Y2ZhOmFsaWFz">TmV3R3V5</Cell></Row></CellSet>' "http://example.com:8000/users/row1/cfa:alias/?check=delete"
curl -vi -X DELETE -H "Accept: application/json" -H "Content-Type: application/json" -d '{"Row":[{"key":"cm93MQ==","Cell":[{"column":"Y2ZhOmFsaWFz","$":"TmV3R3V5"}]}]}' "http://example.com:8000/users/row1/cfa:alias/?check=delete"
/$(table)/$(row_key) /$(column:qualifier) /$(version_id)/?check=delete
DELETE
条件删除指定行列的单个版本: 将该单元格全部版本的值( any-version-value
)与check-value
进行比较, 如果any-version-value
与check-value
相等, 将URL中row_key/column:qualifier/version_id
对应行列的对应版本删除, 其中column:qualifier
的形式是column_family:column_name
,version_id
是一个数目标版本的时间戳+1
, 他的值等于. 其他与条件删除某行数据相同curl -vi -X DELETE -H "Accept: text/xml" -H "Content-Type: text/xml" -d '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><CellSet><Row key="cm93MQ=="><Cell column="Y2ZhOmFsaWFz">TmV3R3V5</Cell></Row></CellSet>' "http://example.com:8000/users/row1/cfa:alias/1519423552160/?check=delete"
curl -vi -X DELETE -H "Accept: application/json" -H "Content-Type: application/json" -d '{"Row":[{"key":"cm93MQ==","Cell":[{"column":"Y2ZhOmFsaWFz","$":"TmV3R3V5"}]}]}' "http://example.com:8000/users/row1/cfa:alias/1519423552160/?check=delete"
备注:
- 在json示例中:
-d
选项末尾的{"column":"Y2ZhOmFsaWFz", "$":"TmV3R3V5"}
是用Base64编码的查询的单元格名和值
,"Y2ZhOmFsaWFz"
是"cfa:alias"
,"TmV3R3V5"
是"NewGuy"
"cm93MQ=="
是Base64编码后的"row1"
, 是查询并删除的行键
- endpoint中的
"/?check=delete"
是CheckAndDelete请求的标志- 最后一个示例中
请求URL
中的"version_id"
应当等于"目标版本的时间戳+1"
- URL中的
"row key"
,"column family"
,"cell name"或"column family:column name"
,"version_id"
, 应当采用URL编码.
- xml示例与json示例基本上相同, 此处不在多做解释.