Hbase的访问方式包括:
  Ø Native Java API:最常规和高效的访问方式;
  Ø HBase Shell:HBase的命令行工具,最简单的接口,适合HBase管理使用;
  Ø Thrift Gateway:利用Thrift序列化技术,支持C++,PHP,Python等多种语言,适合其他异构系统在线访问HBase表数据;
  Ø REST Gateway:支持REST 风格的Http API访问HBase, 解除了语言限制;
  Ø MapReduce:直接使用MapReduce作业处理Hbase数据;
  Ø 使用Pig/hive处理Hbase数据。

1.rest API访问操作流程

首先,启动rest API服务

7891为端口号,可以自定义

->hbase-daemon.sh start rest -p 7891
->jps //查看服务是否启动

#如果出现下面的的服务,表示启动成功

12830 RESTServer

浏览器验证:

hadoop-standalone:7891 (前提是要创建好数据表) // 主机名+端口,局域网:IP+端口

显示数据表,则表示rest接口测试正确

访问 http://192.168.1.5:7891/version/cluster 地址,查看版本信息

访问 http://192.168.1.5:7891/status/cluster 地址,查看状态

http://192.168.1.5:7891/studentinfo/stu对表中记录检索方式:查询指定rowkey下的指定列族的数据GET请求

向表添加列族与列:PUT请求

更多hbase的rest api请查看官网 http://wiki.apache.org/hadoop/Hbase/HbaseRest

局域网内Postman测试

1.获取数据表

2181 hbase 端口作用 hbase restful接口_REST

2.创建数据表

2181 hbase 端口作用 hbase restful接口_REST_02

3.获取数据表student的数据

2181 hbase 端口作用 hbase restful接口_linux_03

*注:接口过多这里就不一一列举了,详细接口查询与使用,请查看*

Rest请求参数方式也可以是Json:

//举例:创建表
#json格式为:

{
    "ColumnSchema":[
        {
            "name":"family1",
            "KEEP_DELETED_CELLS":"TRUE",
            "VERSION":"3"
        }
    ]
}

URL:http://192.168.2.97:7891/users/schema headers:
Accept:application/json
Content-Type:application/json

*详细接口json格式请查看:

Rest访问安全配置(待验证)

用于安全操作的客户端配置 - REST网关

将以下内容添加到每个REST网关的hbase-site.xml文件:

<property>
       <name> hbase.rest.keytab.file </ name>
    <value> $ KEYTAB </ value>
   </ property>
   <property>
    <name> hbase.rest.kerberos.principal </name>
    <value> $USER/_HOST@HADOOP.LOCALDOMAIN </value>
   </ property>

分别替换$ USER和$ KEYTAB的相应凭据和密钥表。

REST网关将使用提供的凭据与HBase进行身份验证。 REST网关本身将不执行身份验证。 通过REST网关的所有客户端访问将使用REST网关的凭据并具有其权限。

客户端应该可以通过SPEGNO HTTP身份验证通过REST网关以直通方式向HBase集群进行身份验证。 这是未来的工作。

SPEGNO HTTP身份验证加固后

在Web / REST接口中标识和认证请求客户端

```java
private static UserGroupInformation getUser(HttpServletRequest req) {  
  String remoteUser = req.getRemoteUser();  
  UserGroupInformation callerUGI = null;  
  if (remoteUser != null)   
  {    
    callerUGI = UserGroupInformation.createRemoteUser(remoteUser);  
  }  
  return callerUGI;
}
这可以用于处理事件

> @PUT@Path("/jobs/{jobid}/tasks/{taskid}/attempts/{attemptid}/state")@Produces({
> MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })@Consumes({
> MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })public
> Response updateJobTaskAttemptState(JobTaskAttemptState targetState, 
> @Context HttpServletRequest request, @PathParam("jobid"))    throws
> IOException, InterruptedException { init(); UserGroupInformation
> callerUGI = getUser(request); // if the UGI is null, no remote user.