读书笔记-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序列概览 列表和元组的主要区别在于,列表可以修改,元组则不能.也就是说如果要根据要求来添加元素,那么列表可能会更好用;而出于某些原因,序列不能修改的时候,使用元组则更为合适.使用后者的理由通常是 ...
随机推荐
- Microsoft Windows Server 部署
Microsoft Windows Server 部署 多重引导 计算机可以被设置多重引导,即在一台计算机上安装多个操作系统..在安装多重引导的操作系统时,还要注意版本的类型,一般应先安装版本低的,再 ...
- Visual Odometry
http://www.cvlibs.net/datasets/kitti/eval_odometry.php
- PHP18 PHP与AJAX
学习要点 JavaScript实现Ajax jQuery实现Ajax JSON PHP的JSON函数 JavaScript处理JSON数据 JavaScript实现Ajax 什么是Ajax 搜狗地图 ...
- Hibernate-04 延迟加载
学习任务 延迟加载 Open Session In View模式 延迟加载 延迟加载(lazy load懒加载)是在真正需要数据时才执行SQL语句进行查询,避免了无谓的性能开销. 延迟加载策略的设置分 ...
- MySQL-04 高级特性
学习要点 MySQL系统函数 MySQL视图 MySQL存储过程 MySQL自定义函数 MySQL触发器 MySQL事务 MySQL事件 MySQL系统函数 数学函数 获取整数的函数:CEIL(x). ...
- JAVA中等待所有线程都执行结束(转2)
场景: package com.java4all.mypoint; import java.util.concurrent.CountDownLatch; public class ThreadTes ...
- IDEA无法编译源码,IDEA查看源码出现/* compiled code */
打开Settings -> Plugins 搜索dec,选中,确定,重启,解决
- [CF] 219D Choosing Capital for Treeland
题意翻译 题目描述 Treeland国有n个城市,这n个城市连成了一颗树,有n-1条道路连接了所有城市.每条道路只能单向通行.现在政府需要决定选择哪个城市为首都.假如城市i成为了首都,那么为了使首都能 ...
- 7. 配置undo表空间
7. 配置undo表空间 undo日志可以存储在一个或多个undo表空间中,无需存储在系统表空间中. 要为MySQL实例配置单独的undo表空间,请执行以下步骤 [重要]: 只能在初始化新MySQL实 ...
- 数据结构( Pyhon 语言描述 ) — — 第4章:数据和链表结构
数据结构是表示一个集合中包含的数据的一个对象 数组数据结构 数组是一个数据结构 支持按照位置对某一项的随机访问,且这种访问的时间是常数 在创建数组时,给定了用于存储数据的位置的一个数目,并且数组的长度 ...