天天看点

HBase Restful接口文档HBase Restful接口文档

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示例中:
  1. -d

    选项末尾的

    {"column":"Y2ZhOmFsaWFz", "$":"TmV3R3V5"}

    用Base64编码的查询的单元格名和值

    ,

    "Y2ZhOmFsaWFz"

    "cfa:alias"

    ,

    "TmV3R3V5"

    "NewGuy"

  2. {"column":"Y2ZhOmFsaWFz","$":"T2xkR3V5"}

    用Base64编码的插入的单元格名和值

    ,

    "Y2ZhOmFsaWFz"

    "cfa:alias"

    ,

    "T2xkR3V5"

    "NewGuy"

  3. "cm93MQ=="

    Base64编码后的"row1"

    , 是查询/插入的

    行键

  4. endpoint中的

    "/?check=put"

    是CheckAndPut请求的标志
  5. 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示例中:
  1. -d

    选项末尾的

    {"column":"Y2ZhOmFsaWFz", "$":"TmV3R3V5"}

    用Base64编码的查询的单元格名和值

    ,

    "Y2ZhOmFsaWFz"

    "cfa:alias"

    ,

    "TmV3R3V5"

    "NewGuy"

  2. "cm93MQ=="

    Base64编码后的"row1"

    , 是查询并删除的

    行键

  3. endpoint中的

    "/?check=delete"

    是CheckAndDelete请求的标志
  4. 最后一个示例中

    请求URL

    中的

    "version_id"

    应当等于

    "目标版本的时间戳+1"

  5. URL中的

    "row key"

    ,

    "column family"

    ,

    "cell name"或"column family:column name"

    ,

    "version_id"

    , 应当采用URL编码.
  • xml示例与json示例基本上相同, 此处不在多做解释.

继续阅读