HBase Thrift:如何连接到远程HBase主站/集群?

Sum*_*man 4 hbase thrift cloudera

感谢Cloudera发行版,我在本地计算机上运行了HBase master/datanode + Thrift服务器,可以编写和测试HBase客户端程序并使用它,没问题.

但是,我现在需要在生产中使用Thrift,而且我无法找到有关如何使用生产HBase集群运行Thrift的文档.

据我所知,我需要在客户端节点上运行hbase-thrift程序,因为Thrift程序只是HBase的另一个中间客户端.

所以我猜我必须能够以某种方式将主节点主机名/ IP指定为HBase-Thrift?我该怎么做?

另外,有关如何在生产中扩大规模的任何建议?我只需要这样的设置:

Client <-> Thrift client <-> HBase Master <-> Multiple HBase workers
Run Code Online (Sandbox Code Playgroud)

Lar*_*cke 7

让它运行

您不必在本地计算机上运行Thrift服务器,它可以在任何地方运行,但RegionServers通常是一个好地方*.然后在代码中连接到该服务器.

一个Python示例:

transport = TSocket.TSocket("random-regionserver", 9090)
Run Code Online (Sandbox Code Playgroud)

你明显random-regionserver要用你正在运行Thrift服务器的其中一台服务器替换它.

该服务器从通常的位置获取其配置.如果你正在使用CDH,那么你将找到配置/etc/hbase/conf/hbase-site.xml,你需要添加一个属性hbase.zookeeper.quorum:

<property>
  <name>hbase.zookeeper.quorum</name>
  <value>list of your zookeeper servers</value>
</property>
Run Code Online (Sandbox Code Playgroud)

当您从下载的Apache发行版启动Thrift服务器时,这类似,但它hbase-site.xml可能位于不同的目录中.

扩展它

现在扩展的一个简单方法是保留Thrift客户端中所有Regionservers的列表,并在connect上随机选择一个.或者您创建多个连接并每次使用随机连接.某些语言绑定(即PHP)具有TSocketPool可以传递所有服务器的位置.否则,您需要做一些手动工作.

使用此技术,所有读取和写入应该或多或少地分布在群集中的Thrift服务器上.到达Thrift服务器的每个读取或写入操作仍将被转换为来自Thrift服务器的基于Java的API调用,然后该服务器打开到正确的Regionserver的网络连接以执行所请求的操作.

这意味着您将无法获得与使用Java API时相同的性能.它可能如果缓存自己区域的位置和命中适当节俭服务器但即使如此,即使在本地服务器上结束了一个额外的Java API调用将进行帮助.HBASE-4460可以帮助解决这个问题,但这包含在CDH3u4或CDH4中.

*HBASE-4460存在一个问题,实际上是在Regionserver中嵌入Thrift服务器.