让它运行
您不必在本地计算机上运行 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 的网络连接以执行请求的操作。
这意味着您将无法获得与使用 Java API 时一样好的性能。如果您自己缓存区域位置并点击适当的 Thrift 服务器,这可能会有所帮助,但即便如此,即使它最终在本地服务器上,也会进行额外的 Java API 调用。HBASE-4460将有助于解决这种情况,但这不包含在 CDH3u4 或 CDH4 中。
* 存在HBASE-4460问题,它实际上在 Regionserver 中嵌入了 Thrift 服务器。