读书笔记-HBase in Action-第二部分Advanced concepts-(3)非Javaclient
HBase Shell
HBase shell使用起来最方便,进入HBase shell控制台就可以使用。
$ $HBASE_HOME/bin/hbase shell
常见操作有create(创建表)/put(插入或更新数据)/get(依据rowkey查询)/scan(范围查询)/delete(删除列)/deleteAll(依据rowkey删除整行数据)/disable&drop(禁用表之后再删除)。
基于数据库的项目,往往会在某个文件夹下存储专门的sql脚本,记录每次迭代数据库变更;同理,HBase脚本也能够组织成文件,用同样的方式管理起来:
#!/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通信。为了避免RESTserver单点问题,提高吞吐量,能够启动多台RESTserver组成集群,但要注意的是,Scanner API是有状态的,须要进行资源分配,所以进行scan操作时,client要始终连接同一台RESTserver。
以后台进程启动REST服务。
$ hbase-daemon.sh start rest -p 9999
starting rest, logging to logs/hbase-hbase-rest-ubuntu.out
REST服务支持多种响应格式,比方XML、JSON、Protobufs和文本。以下演示样例调用RESTAPI,更改用户密码。注意列名和值都须要使用Base64编码。
$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服务类似。Thriftclient在一次会话内,都和一台server保持连接,所以建立Thrift Gateway集群,进行负载均衡要方便一些。
首先启动Thrift服务:
$ hbase thrift start
...
ThriftServer:starting HBase ThreadPool Thrift server on /0.0.0.0:9090
client依据不同语言进行代码生成,以Python为例:
$ thrift -gen py../hbase-0.92.1/src/main/resources/org/apache/hadoop/hbase/
thrift/Hbase.thrift
各个语言的API接口都和JAVAclient基本一致,用法就不多说了。
Asynchbase:异步client
原生的JAVAclient全然是同步的。Asynchbase是全新实现的异步client,Asynchbase的最主要用户是OpenTSDB(存储层使用HBase的开源大规模集群监控系统,请參考http://opentsdb.net/)。
下图异步请求过程參考opentsdb:
- client发送异步请求。
- 获得异步结果Deferred(类似于Java的Future接口)。
- 注冊回调Callbacks到Deferred,完毕client逻辑所在线程返回。
- 服务端异步运行数据请求,完毕后触发回调。
Asynchbase具有下面几个特点:
- 异步&非堵塞&线程安全,所以特别适合大量并发写操作场景,提供更高的吞吐量
- 多版本号支持,Asynchbase是全然又一次实现的接口,所以不像原生client,须要和相应版本号的集群配套使用。
- API方面最强大的是Callback回调链,链上的前一个callback将返回结果作为參数传递给下一个callback,进行一连串的异步操作组合。
读书笔记-HBase in Action-第二部分Advanced concepts-(3)非Javaclient的更多相关文章
- 读书笔记-HBase in Action-第二部分Advanced concepts-(1)HBase table design
本章以山寨版Twitter为例介绍HBase Schema设计模式.广义的HBase Schema设计不仅仅包含创建表时指定项,还应该综合考虑Column families/Column qualif ...
- 读书笔记-HBase in Action-第二部分Advanced concepts-(2)Coprocessor
Coprocessor是HBase 0.92.0引入的特性.使用Coprocessor.能够将一些计算逻辑下推到HBase节点,HBase由一个单纯的存储系统升级为分布式数据处理平台. Coproce ...
- 读书笔记-HBase in Action-第一部分 HBase fundamentals
新项目准备上HBase.HBase眼下由组里某牛负责.本着学会使用HBase的目标,先阅读下HBase in Action,一共十章组织成三部分,须要学习的内容包含HBase基本实现原理,用法,Sch ...
- unix 环境高级编程-读书笔记与习题解答-第二篇
第四节 输入与输出 上次的笔记中写到的 open, read, write, lseek 以及close ,都是不带缓存的IO函数,这些函数都使用文件描述符进行工作. 上一篇笔记用到的 read(ST ...
- 读书笔记-HBase in Action-第三部分应用-(1)OpenTSDB
OpenTSDB是基于HBase的开源监控系统,能够支持上万规模集群监控和上亿数据点採集. 当中TSDB代表Time Series Database,OpenTSDB在时间序列数据的存储和查询上都做了 ...
- 读书笔记-HBase in Action-第三部分应用-(2)GIS系统
本章介绍用HBase存储.高效查询地理位置信息. Geohash空间索引 考虑LBS应用中常见的两个问题:1)查找离某地近期的k个地点.2)查找某区域内地点. 假设要用HBase实现高效查找,首先要考 ...
- [读书笔记]算法(Sedgewick著)·第二章.初级排序算法
本章开始学习排序算法 1.初级排序算法 先从选择排序和插入排序这两个简单的算法开始学习排序算法.选择排序就是依次找到当前数组中最小的元素,将其和第一个元素交换位置,直到整个数组有序. public s ...
- 《Linux内核》课本读书笔记 第一章、第二章
- Python基础教程 读书笔记(2)第二章 列表和元组
2.1序列概览 列表和元组的主要区别在于,列表可以修改,元组则不能.也就是说如果要根据要求来添加元素,那么列表可能会更好用;而出于某些原因,序列不能修改的时候,使用元组则更为合适.使用后者的理由通常是 ...
随机推荐
- windows10用WMware安装Linux虚拟机详细步骤
windows10用WMware安装Linux虚拟机详细步骤 一.安装环境 windows10操作系统物理机VMware Workstation 软件(可以在网上下载)CentOS6.9镜像文件( ...
- java 数据库(二)
1.SQL概述 1.什么是SQL(了解): 结构化查询语言,是一种功能齐全的数据库语言.在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的 SQL被美国国家标准局(ANSI)确定为关 ...
- ios之coredata
Core Data数据持久化是对SQLite的一个升级,它是ios集成的,在说Core Data之前,我们先说说在CoreData中使用的几个类. (1)NSManagedObjectModel(被管 ...
- 2019天梯赛练习题(L1专项练习)
7-1 水仙花数 (20 分) 水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身.例如:1. 本题要求编写程序,计算所有N位水仙花数. 输入样例: 3 输出样例: 153 ...
- nginx 获取真实ip
使用阿里云SLB,无法获取真实ip问题 官方给出的是如下用法,需要安装模块,大体上是没有错的,但是比较模糊,实际操作中可能会踩坑,所以参考学习即可,不必照搬.(那个http_realip_module ...
- Oracle 11G RAC For ASM 利用RMAN COPY进行存储迁移
转载请注明出处 一.需求背景 客户数据库存储空间接近存满,需购置一台新的存储,进行数据迁移,客户允许少量停机时间. 二.实施方法讨论 利用ASM rebalance 进行迁移 可以实现0宕机进行迁移, ...
- Go:反射
一.通过反射获取类型信息 在 Go 程序中,使用 reflect.TypeOf() 函数可以获得任意值的类型对象(reflect.Type),程序通过类型对象可以访问任意值的类型信息. package ...
- HDU 6216 A Cubic number and A Cubic Number(数学/二分查找)
题意: 给定一个素数p(p <= 1e12),问是否存在一对立方差等于p. 分析: 根据平方差公式: 因为p是一个素数, 所以只能拆分成 1*p, 所以 a-b = 1. 然后代入a = b + ...
- 安装mysql后无法找到临时密码的解决方案
安装mysql后无法找到临时密码的解决方案 一.环境 系统:CentOS7mysql:5.7.20 二.解决步骤 step1:修改/etc/my.cnf添加: skip-grant-tables ...
- NYOJ-613//HDU-1176-免费馅饼,数字三角形的兄弟~~
免费馅饼 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人 ...