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字段返回.
表格中其他示例都以
作为Scanner的endpoint为例.
http://example.com:8000/users/scanner/145869072824375522207
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
)写入到单元格的当前/最终版本中. 行, 列, 值必须使用Base64编码. 可以在终端中使用
new-value
命令来对字符串进行编码或者解码. 请求的负载在curl的
base64
参数, 负载中要查询的单元格必须在最末尾, 而且正好在要插入的单元格后面, 查询的单元格和插入的单元格必须在同一行, 你也可以将要插入的数据保存到文件中, 然后通过
--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中的
是CheckAndPut请求的标志
"/?check=put"
应当是URL编码的, 举个例子,
URL里的行键
和
"david%20chen"
是
"row1"
和
"david chen"
的URL编码
"row1"
提示: "cfa"是列族名, "alias"是列名, 他们都是非Base64编码的单元格名
- xml示例与json示例基本上相同, 此处不在多做解释.
- Check-And-Delete操作
备注:
Endpoint HTTP请求方法 说明 示例
/$(table)/$(row_key)/?check=delete
DELETE
条件删除某行数据: 将该单元格全部版本的值( )与
any-version-value
进行比较, 如果
check-value
与
any-version-value
相等, URL中行键对应行删除. 查询用的行, 列, 值必须使用Base64编码. 可以在终端中使用
check-value
命令来对字符串进行编码或者解码. 请求的负载在curl的
base64
参数, 你也可以将查询的数据保存到文件中, 然后通过
--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
相等, URL中行键对应行的对应列族删除. 其他与条件删除某行数据相同
check-value
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
相等, 将URL中
check-value
对应行的对应列删除, 其中
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
相等, 将URL中
check-value
对应行列的对应版本删除, 其中
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中的
是CheckAndDelete请求的标志
"/?check=delete"
- 最后一个示例中
中的
请求URL
应当等于
"version_id"
"目标版本的时间戳+1"
- URL中的
,
"row key"
,
"column family"
,
"cell name"或"column family:column name"
, 应当采用URL编码.
"version_id"
- xml示例与json示例基本上相同, 此处不在多做解释.