【Java】HBase_thrift/thrift2_使用指南

栏目: 数据库 · 发布时间: 7年前

内容简介:【Java】HBase_thrift/thrift2_使用指南

Thrift server简介

Thrift server是HBase中的一种服务,主要用于对多语言API的支持。基于 Apache Thrift (多语言支持的通信框架)开发,目前有两种版本 thriftthrift2

thrift2是当时为了适应新的Java API,提出来的。由于种种原因,thrift2没有完美兼容并替代thrift,所有就留下了两个版本。

Thrift 和 Thrift2 的区别

  • 接口设计上Thrift2要比Thrfit更优雅,或者说和现在的API更贴近。比如两者的get接口:
// Thrift2 的get接口,传入TGet(对应Java API种的Get类)
    // 用过Java API的同学看起来应该会更亲切
    TResult get(
         /** the table to get from */
        1: required binary table,
        /** the TGet to fetch */
        2: required TGet tget
    ) throws (1: TIOError io)
// Thrift 的get接口,没有TGet这些包装,比较裸
    list<TCell> get(
        /** name of table */
        1:Text tableName,
        /** row key */
        2:Text row,
        /** column name */ 
        3:Text column, 
        /** Get attributes */
        4:map<Text, Text> attributes
    ) throws (1:IOError io)
  • Thrift2没有DDL方面的接口,所以现在 Hue 还是用Thrift的接口。如果你只想读写数据,建议用Thrift2。

Thrift server原理

Thrfit其实就是个代理,你的请求发到Thrift server上后,server通过Java API再帮你访问HBase。

【Java】HBase_thrift/thrift2_使用指南

Thrift实现类是 org.apache.hadoop.hbase.thrift.ThriftServer ,thrift2的实现类是 org.apache.hadoop.hbase.thrift2.ThriftServer 。它们访问HBase使用的也是普通的HBase client API,所以当你的请求到达Thrift server后,它通过client API去帮你定位数据,然后读取数据。这么来看,Thrift Server比较灵活,你可以部署在客户机上,也可以独立部署一个thrift集群。

Thrift server 参数选择

  • TServer的选择。这是Thrift框架server端处理模型的选择。有三种, TNonblockingServerTHsHaServerTThreadPoolServer 。可以通过启动命令参数指定,具体运行 ./bin/hbase thrift 可以看到命令帮助(or ./bin/hbase thrift2 )。默认是用 TThreadPoolServer ,建议就不用改了,除非你特别了解你的场景。关于这几种模型的区别,性能对比可以看这篇 文章
  • hbase.regionserver.thrift.compact 是否使用Thrift TCompactProtocol,默认false。如果你每列数据比较大,可以试着开启,减少带宽。
  • hbase.thrift.connection.cleanup-interval thrift server清理与HBase连接的周期,与HBase的是一个长连接,默认10秒
  • hbase.thrift.connection.max-idletime 如果与HBase的长连接超过这个时间没有被使用,则会被清理,默认10分钟
  • hbase.thrift.minWorkerThreads TThreadPoolServer的线程池中的corePoolSize,也就是即便空闲时候保持的线程数,默认16。
  • hbase.thrift.maxWorkerThreads TThreadPoolServer的线程池中的maximumPoolSize,默认1000。这个会影响server最大处理能力,需要根据硬件衡量。
  • hbase.thrift.maxQueuedRequests TThreadPoolServer的线程池队列长度上限,超过这个值时会去创建一个新的线程处理请求(前提是没有达到maxWorkerThreads,否则拒绝请求)

注: 上述最后三个值对thrift2无效。1.3之前的版本中,thrift2无法设定这些值。2.0版本中在thrift2启动命令里通过指定'w'选项来设置maxWorkerThreads。具体可以运行上文中提到的命令,查看是否支持'w'选项,如果不支持,默认max=int最大值。

Thrift部署模式

  • 集群模式 【Java】HBase_thrift/thrift2_使用指南

这是最常见的模式,集群模式中的thrift建议不要和RS或者DN混部署。并且如果你使用集群模式的部署方案,你的client端不要去维护长连接。因为如果你维护一个长连接,负载均衡就会失效,如果thrift集群重启,大部分连接会连上第一个起来的thrfit server。

  • 本地模式 【Java】HBase_thrift/thrift2_使用指南

本地模式就是在每个客户机上起一个client,这个客户机独享一个thrift。优点是部署简单,网络开销少。并且这种模式可以使用长连接,自己维护TTransport池。对于持续的写入或者读取,效果要比短连接好很多。HBase IPC本身也是维护一个长连接。缺点是,可靠性略差,如果thrift server挂了的话。但本身如果是多Client,其实也无所谓。

使用示例

直接参考这篇博文吧: http://blog.cloudera.com/blog/2013/09/how-to-use-the-hbase-thrift-interface-part-1/

PS:如果你不想自己在云上部署运维HBase,可以使用云HBase


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python for Data Analysis

Python for Data Analysis

Wes McKinney / O'Reilly Media / 2012-11-1 / USD 39.99

Finding great data analysts is difficult. Despite the explosive growth of data in industries ranging from manufacturing and retail to high technology, finance, and healthcare, learning and accessing d......一起来看看 《Python for Data Analysis》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

html转js在线工具
html转js在线工具

html转js在线工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具