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.获取数据表
2.创建数据表
3.获取数据表student的数据
*注:接口过多这里就不一一列举了,详细接口查询与使用,请查看*
https://blog.csdn.net/supperman_009/article/details/64440290?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.nonecase
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格式请查看:https://blog.csdn.net/xuwukui/article/details/60872187
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.