让它运行
您不必在本地计算机上运行 Thrift 服务器,它可以在任何地方运行,但 RegionServers 通常是一个好地方*。然后在代码中连接到该服务器。
一个 Python 示例:
transport = TSocket.TSocket("random-regionserver", 9090)
您显然会将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>
当您从下载的 Apache 发行版启动 Thrift 服务器时,这与此类似,只是 hbase-site.xml 可能位于不同的目录中。
扩大规模
现在扩展的一种简单方法是在 Thrift 客户端中保留所有 Regionserver 的列表,并在连接时随机选择一个。或者您创建多个连接并每次使用一个随机连接。某些语言绑定(即 PHP)有一个 TSocketPool,您可以在其中传递所有服务器。否则,您需要做一些手动工作。
使用这种技术,所有读取和写入都应该或多或少地分布在集群中的 Thrift 服务器上。到达 Thrift 服务器的每个读取或写入操作仍会被转换为来自 Thrift 服务器的基于 Java 的 API 调用,然后打开与适当 Regionserver(s) 的网络连接以执行请求的操作。
这意味着您不会获得与使用 Java API 时一样好的性能。如果您自己缓存区域位置并点击适当的 Thrift 服务器,它可能会有所帮助,但即便如此,即使它最终在本地服务器上,也会进行额外的 Java API 调用。 HBASE-4460 将有助于解决这种情况,但这不包含在 CDH3u4 或 CDH4 中。
* 有一个问题 HBASE-4460 实际上在 Regionserver 中嵌入了 Thrift 服务器。