HBase in Action-第二部分Advanced concepts-(3)非Java客户端【REST、Thrift】
2014-12-05 09:16
483 查看
HBase Shell
HBase shell使用起来最方便,进入HBase shell控制台即可使用。[plain] view
plaincopy
$ $HBASE_HOME/bin/hbase shell
常见操作有create(创建表)/put(插入或更新数据)/get(根据rowkey查询)/scan(范围查询)/delete(删除列)/deleteAll(根据rowkey删除整行数据)/disable&drop(禁用表之后再删除)。
基于数据库的项目,往往会在某个目录下存储专门的sql脚本,记录每次迭代数据库变更;同理,HBase脚本也可以组织成文件,用相同的方式管理起来:
[plain] view
plaincopy
#!/bin/sh
exec $HBASE_HOME/bin/hbase shell <<EOF
create 'twits',{NAME => 't', VERSIONS => 1}
EOF
值得一提的是,HBase shell是用JRuby实现的,所以create语句语法类似于Ruby的函数调用。HBase同样提供了JRuby版client,简单强大。。
REST
如图,REST Gateway Service以独立进程运行,它负责和HBase通信。为了避免REST服务器单点问题,提高吞吐量,可以启动多台REST服务器组成集群,但要注意的是,Scanner API是有状态的,需要进行资源分配,所以进行scan操作时,客户端要始终连接同一台REST服务器。以后台进程启动REST服务。
[plain] view
plaincopy
$ hbase-daemon.sh start rest -p 9999
starting rest, logging to logs/hbase-hbase-rest-ubuntu.out
REST服务支持多种响应格式,比如XML、JSON、Protobufs和文本。下面示例调用RESTAPI,更改用户密码。注意列名和值都需要使用Base64编码。
[php] view
plaincopy
$curl -XPUT \
-H"Content-Type: application/json" \
http://localhost:9999/users/TheRealMT/info:password\
-d'{
"Row": [
{
"Cell": [
{
"column":"aW5mbzpwYXNzd29yZA==",
"$": "NzBOQHJJIE4wIDcwdDBSMA=="
}
],
"key":"VGhlUmVhbE1U"
}
]
}'
Thrift
对于非Java码农,最方便的还是使用跨语言RPC调用框架Thrift。HBase提供了Thrift IDL服务描述接口,支持多达14种不同语言,并实现了相应的后台服务。Thrift服务的架构与REST服务类似。Thrift客户端在一次会话内,都和一台服务器保持连接,所以建立Thrift Gateway集群,进行负载均衡要方便一些。
首先启动Thrift服务:
[plain] view
plaincopy
$ hbase thrift start
...
ThriftServer:starting HBase ThreadPool Thrift server on /0.0.0.0:9090
客户端根据不同语言进行代码生成,以Python为例:
[plain] view
plaincopy
$ thrift -gen py../hbase-0.92.1/src/main/resources/org/apache/hadoop/hbase/
thrift/Hbase.thrift
各个语言的API接口都和JAVA客户端基本一致,使用方法就不多说了。
Asynchbase:异步客户端
原生的JAVA客户端完全是同步的。Asynchbase是全新实现的异步客户端,Asynchbase的最主要用户是OpenTSDB(存储层使用HBase的开源大规模集群监控系统,请参考http://opentsdb.net/)。下图异步请求过程参考opentsdb:
客户端发送异步请求。
获得异步结果Deferred(类似于Java的Future接口)。
注册回调Callbacks到Deferred,完成客户端逻辑所在线程返回。
服务端异步执行数据请求,完成后触发回调。
Asynchbase具有以下几个特点:
异步&非阻塞&线程安全,所以特别适合大量并发写操作场景,提供更高的吞吐量
多版本支持,Asynchbase是完全重新实现的接口,所以不像原生客户端,需要和对应版本的集群配套使用。
API方面最强大的是Callback回调链,链上的前一个callback将返回结果作为参数传递给下一个callback,进行一连串的异步操作组合。
转自:http://blog.csdn.net/idontwantobe/article/details/36644785,如有侵权,联系删除
相关文章推荐
- 读书笔记-HBase in Action-第二部分Advanced concepts-(3)非Java客户端
- 读书笔记-HBase in Action-第二部分Advanced concepts-(3)非Javaclient
- 读书笔记-HBase in Action-第二部分Advanced concepts-(2)Coprocessor
- 读书笔记-HBase in Action-第二部分Advanced concepts-(1)HBase table design
- 读书笔记-HBase in Action-第二部分Advanced concepts-(1)HBase table design
- 读书笔记-HBase in Action-第二部分Advanced concepts-(2)Coprocessor
- HBase 协处理器编程详解,第二部分:客户端代码编写
- Java WEB开发实战 之 第二部分:Web应用基础知识【私塾在线原创】
- 第二部分:使用Jasperreport作为报表控件开发胖客户端报表应用
- 什么是 Enterprise JavaBeans 组件?第二部分:EJB 编程模型
- WCF 4.0 进阶系列 – 第十五章 构建REST服务(第二部分)
- JAVA密码技术基础(第二部分)
- JAVA密码技术基础(第二部分)
- Eclipse Forms: 为胖客户端做的漂亮UI(翻译,第二部分)
- Thrift java服务器与客户端示例 - john c - 博客园
- objective-c学习笔记第四章《objective-c 类(第二部分)与java中的区别》
- Java动画编程基础第二部分
- 应聘Java笔试时可能出现问题及其答案(第二版 第二部分)
- 《跟旺旺老师学Java》_第一章Java简介与JDK部署_第二部分Java跨平台原理
- java中的异常--Exceptions in Java-- 第二部分