HBase in Action-第二部分Advanced concepts-(3)非Java客户端【REST、Thrift】


HBase Shell

HBase shell使用起来最方便,进入HBase shell控制台即可使用。

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. $ $HBASE_HOME/bin/hbase shell  
常见操作有 create (创建表)/ put (插入或更新数据)/ get (根据rowkey查询)/ scan (范围查询)/ delete (删除列)/ deleteAll (根据rowkey删除整行数据)/ disable & drop (禁用表之后再删除)。

基于数据库的项目,往往会在某个目录下存储专门的sql脚本,记录每次迭代数据库变更;同理,HBase脚本也可以组织成文件,用相同的方式管理起来:

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #!/bin/sh  
  2. exec $HBASE_HOME/bin/hbase shell <<EOF  
  3. create 'twits',{NAME => 't', VERSIONS => 1}  
  4. EOF  

值得一提的是,HBase shell是用JRuby实现的,所以create语句语法类似于Ruby的函数调用。HBase同样提供了JRuby版client,简单强大。。


REST

如图,REST Gateway Service以独立进程运行,它负责和HBase通信。为了避免REST服务器单点问题,提高吞吐量,可以启动多台REST服务器组成集群,但要注意的是,Scanner API是有状态的,需要进行资源分配,所以进行scan操作时,客户端要始终连接同一台REST服务器。

                                                                                  以后台进程启动REST服务。

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. $ hbase-daemon.sh start rest -p 9999  
  2. starting rest, logging to logs/hbase-hbase-rest-ubuntu.out  
REST服务支持多种响应格式,比如XML、JSON、Protobufs和文本。下面示例调用RESTAPI,更改用户密码。注意列名和值都需要使用Base64编码。
[php]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. $curl -XPUT \  
  2. -H"Content-Type: application/json" \  
  3. http://localhost:9999/users/TheRealMT/info:password\  
  4. -d'{  
  5.   "Row": [  
  6.     {  
  7.       "Cell": [  
  8.       {  
  9.         "column":"aW5mbzpwYXNzd29yZA==",  
  10.         "$""NzBOQHJJIE4wIDcwdDBSMA=="  
  11.       }  
  12.       ],  
  13.       "key":"VGhlUmVhbE1U"  
  14.     }  
  15.   ]  
  16. }'  

Thrift

对于非Java码农,最方便的还是使用跨语言RPC调用框架Thrift。HBase提供了Thrift IDL服务描述接口,支持多达14种不同语言,并实现了相应的后台服务。

Thrift服务的架构与REST服务类似。Thrift客户端在一次会话内,都和一台服务器保持连接,所以建立Thrift Gateway集群,进行负载均衡要方便一些。


首先启动Thrift服务:

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. $ hbase thrift start  
  2. ...  
  3. ThriftServer:starting HBase ThreadPool Thrift server on /0.0.0.0:9090  
客户端根据不同语言进行代码生成,以Python为例:
[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. $ thrift -gen py../hbase-0.92.1/src/main/resources/org/apache/hadoop/hbase/  
  2. thrift/Hbase.thrift  

各个语言的API接口都和JAVA客户端基本一致,使用方法就不多说了。


Asynchbase:异步客户端

原生的JAVA客户端完全是同步的。Asynchbase是全新实现的异步客户端,Asynchbase的最主要用户是OpenTSDB(存储层使用HBase的开源大规模集群监控系统,请参考http://opentsdb.net/)。

下图异步请求过程参考opentsdb


  1. 客户端发送异步请求。
  2. 获得异步结果Deferred(类似于Java的Future接口)。
  3. 注册回调Callbacks到Deferred,完成客户端逻辑所在线程返回。
  4.  服务端异步执行数据请求,完成后触发回调。

Asynchbase具有以下几个特点:

  1. 异步&非阻塞&线程安全,所以特别适合大量并发写操作场景,提供更高的吞吐量
  2. 多版本支持,Asynchbase是完全重新实现的接口,所以不像原生客户端,需要和对应版本的集群配套使用。
  3. API方面最强大的是Callback回调链,链上的前一个callback将返回结果作为参数传递给下一个callback,进行一连串的异步操作组合。
转自:http://blog.youkuaiyun.com/idontwantobe/article/details/36644785,如有侵权,联系删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值