• 读书笔记-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


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

    Asynchbase具有下面几个特点:

    1. 异步&非堵塞&线程安全,所以特别适合大量并发写操作场景,提供更高的吞吐量
    2. 多版本号支持,Asynchbase是全然又一次实现的接口,所以不像原生client,须要和相应版本号的集群配套使用。
    3. API方面最强大的是Callback回调链,链上的前一个callback将返回结果作为參数传递给下一个callback,进行一连串的异步操作组合。
  • 相关阅读:
    LeetCode 面试题 02.02. 返回倒数第 k 个节点
    LeetCode 1290. 二进制链表转整数
    LeetCode 面试题52. 两个链表的第一个公共节点
    LeetCode 2. 两数相加
    Jupyter Notebook 常用快捷键 (转)
    LeetCode 414. 第三大的数
    LeetCode 404. 左叶子之和
    三年了
    LeetCode 543. 二叉树的直径
    求结点在二叉排序树中层次的算法
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4033548.html
Copyright © 2020-2023  润新知