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:

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

Asynchbase具有下面几个特点:

  1. 异步&非堵塞&线程安全,所以特别适合大量并发写操作场景,提供更高的吞吐量
  2. 多版本号支持,Asynchbase是全然又一次实现的接口,所以不像原生client,须要和相应版本号的集群配套使用。
  3. API方面最强大的是Callback回调链,链上的前一个callback将返回结果作为參数传递给下一个callback,进行一连串的异步操作组合。

读书笔记-HBase in Action-第二部分Advanced concepts-(3)非Javaclient的更多相关文章

  1. 读书笔记-HBase in Action-第二部分Advanced concepts-(1)HBase table design

    本章以山寨版Twitter为例介绍HBase Schema设计模式.广义的HBase Schema设计不仅仅包含创建表时指定项,还应该综合考虑Column families/Column qualif ...

  2. 读书笔记-HBase in Action-第二部分Advanced concepts-(2)Coprocessor

    Coprocessor是HBase 0.92.0引入的特性.使用Coprocessor.能够将一些计算逻辑下推到HBase节点,HBase由一个单纯的存储系统升级为分布式数据处理平台. Coproce ...

  3. 读书笔记-HBase in Action-第一部分 HBase fundamentals

    新项目准备上HBase.HBase眼下由组里某牛负责.本着学会使用HBase的目标,先阅读下HBase in Action,一共十章组织成三部分,须要学习的内容包含HBase基本实现原理,用法,Sch ...

  4. unix 环境高级编程-读书笔记与习题解答-第二篇

    第四节 输入与输出 上次的笔记中写到的 open, read, write, lseek 以及close ,都是不带缓存的IO函数,这些函数都使用文件描述符进行工作. 上一篇笔记用到的 read(ST ...

  5. 读书笔记-HBase in Action-第三部分应用-(1)OpenTSDB

    OpenTSDB是基于HBase的开源监控系统,能够支持上万规模集群监控和上亿数据点採集. 当中TSDB代表Time Series Database,OpenTSDB在时间序列数据的存储和查询上都做了 ...

  6. 读书笔记-HBase in Action-第三部分应用-(2)GIS系统

    本章介绍用HBase存储.高效查询地理位置信息. Geohash空间索引 考虑LBS应用中常见的两个问题:1)查找离某地近期的k个地点.2)查找某区域内地点. 假设要用HBase实现高效查找,首先要考 ...

  7. [读书笔记]算法(Sedgewick著)·第二章.初级排序算法

    本章开始学习排序算法 1.初级排序算法 先从选择排序和插入排序这两个简单的算法开始学习排序算法.选择排序就是依次找到当前数组中最小的元素,将其和第一个元素交换位置,直到整个数组有序. public s ...

  8. 《Linux内核》课本读书笔记 第一章、第二章

  9. Python基础教程 读书笔记(2)第二章 列表和元组

    2.1序列概览 列表和元组的主要区别在于,列表可以修改,元组则不能.也就是说如果要根据要求来添加元素,那么列表可能会更好用;而出于某些原因,序列不能修改的时候,使用元组则更为合适.使用后者的理由通常是 ...

随机推荐

  1. merge dict key

    #!/usr/local/python # -*- coding:utf-8 -*-user_dict = {'python': 23, 'Python': 51, '机器':10, 'PYTHON' ...

  2. 888. Fair Candy Swap@python

    Alice and Bob have candy bars of different sizes: A[i] is the size of the i-th bar of candy that Ali ...

  3. MySQL redo log 与 binlog 的区别

    MySQL redo log 与 binlog 的区别 什么是redo log 什么是binlog redo log与binlog的区别 1. 什么是redo log? redo log又称重做日志文 ...

  4. CSS3---渲染属性

    1.计数器 CSS3计数器( CSS Counters )可以允许我们使用css对页面中的任意元素进行计数,实现类似于有序列表的功能.与有序列表相比,它的突出特性在于可以对任意元素计数,同时实现个性化 ...

  5. json_decode 解析带BOM头文件错误

    //取前三个字符 并转化为ASCII 判断是否为BOM文件 $charset[1] = substr($result, 0, 1); $charset[2] = substr($result, 1, ...

  6. go语言碎片整理之标准库log

    log Go语言内置的log包实现了简单的日志服务.本文介绍了标准库log的基本使用. 使用Logger log包定义了Logger类型,该类型提供了一些格式化输出的方法.本包也提供了一个预定义的“标 ...

  7. 在ubuntu18.04版本安装vscode

    方式一:图形安装 1. 在ubuntu桌面找到应用中心 2. 在软件中心中,搜索Visual Studio Code 3. 在页面中就可以直接选择安装 方式二:命令安装 1. 从vscode官网下载最 ...

  8. nginx启动、重启、关闭、升级

    一.启动 cd usr/local/nginx/sbin ./nginx 二.重启 更改配置重启nginx kill -HUP 主进程号或进程号文件路径 或者使用 cd /usr/local/ngin ...

  9. NIUDAY 11.23 北京站抢票啦 | 看 AI 落地行业 享 AI 时代红利

    2018 年是见证「奇迹」的一年.AI 从多年的热门话题中开始走下神坛,逐渐深入到了各个行业,加速经济结构优化及行业智慧化升级,AI 已不再是难以企及的神话而是可触摸的美好未来. 政策支持加上资本推动 ...

  10. [luoguP1186] 玛丽卡(spfa)

    传送门 因为要随机删除一条边,而枚举所有边肯定会超时,经过发现,先求出一遍最短路,而要删除的边肯定在最短路径上,删除其他的边对最短路没有影响. 所以可以先求出最短路,再枚举删除最短路上的每一条边再求最 ...