阅读328 返回首页    go 阿里云 go 技术社区[云栖]


HBase thrift/thrift2 使用指南

Thrift server简介

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

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

Thrift 和 Thrift2 的区别

  • 接口设计上Thrift2要比Thrfit更优雅,或者说和现在的API更贴近。比如两者的get接口: js // 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) js // 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。
Thrift_server
Thrift实现类是org.apache.hadoop.hbase.thrift.ThriftServer,thrift2的实现类是org.apache.hadoop.hbase.thrift2.ThriftServer。它们访问HBase使用的也是普通的HBase client API,所以当你的请求到达Thrift server后,它通过client API去帮你定位数据,然后读取数据。这么来看,Thrift Server比较灵活,你可以部署在HBase集群内,也可以独立部署在集群外。

Thrift server 参数选择

  • TServer的选择。这是Thrift框架server端处理模型的选择。有三种,TNonblockingServerTHsHaServerTThreadPoolServer。可以通过启动命令参数指定,具体运行./bin/hbase thrift可以看到命令帮助(or ./bin/hbase thrift2)。默认是用TThreadPoolServer,建议就不用改了,除非你特别了解你的场景。关于这几种模型的区别,性能对比可以看这篇文章
  • hbase.regionserver.thrift.compact 是否使用Thrift TCompactProtocol,默认false。如果你每列数据比较大,可以试着开启,减少带宽。
  • 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长连接,减少server线程数,减少建立建立连接的开销,待验证。

Thrift部署模式

等待更新

最后更新:2017-05-22 22:01:46

  上一篇:go  人工“碳”索意犹尽,智能“硅”来未可知(深度学习入门系列之二)
  下一篇:go  阿里云文件存储SMB协议服务及其申请和使用指南