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

HBase Thrift:如何连接到远程HBase主机/群集?,hbase,thrift,cloudera,Hbase,Thrift,Cloudera,多亏了Cloudera发行版,我在本地机器上运行了一台HBase master/datanode+Thrift服务器,可以编写和测试HBase客户端程序并使用它,没有问题 但是,我现在需要在生产中使用Thrift,而且我找不到关于如何在生产HBase集群中运行Thrift的文档 据我所知,我需要在客户端节点上运行hbase thrift程序,因为thrift程序只是hbase的另一个中间客户端 所以我猜我必须能够以某种方式将主节点主机名/IP指定给HBase Thrift?我该怎么做 还有,关于

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

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

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

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

还有,关于如何扩大生产规模的建议?我是否只需要这样的设置:

Client <-> Thrift client <-> HBase Master <-> Multiple HBase workers
客户端节省客户端HBase主控多个HBase工作进程
让它运行起来 您不必在本地计算机上运行Thrift服务器,它可以在任何地方运行,但RegionServer通常是一个好地方*。然后在代码中连接到该服务器

Python示例:

transport = TSocket.TSocket("random-regionserver", 9090)
显然,您要用运行Thrift服务器的服务器之一替换
random regionserver

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

<property>
  <name>hbase.zookeeper.quorum</name>
  <value>list of your zookeeper servers</value>
</property>

hbase.zookeeper.quorum
zookeeper服务器列表
当您从下载的Apache发行版启动Thrift服务器时,除了
hbase site.xml
可能位于不同的目录之外,情况与此类似

扩大规模 现在扩大规模的一个简单方法是在您的Thrift客户端中保留所有RegionServer的列表,然后在connect上随机选择一个。或者创建多个连接,每次使用一个随机连接。一些语言绑定(如PHP)有一个
TSocketPool
,您可以在其中传入所有服务器。否则你需要做一些手工工作

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

这意味着您将无法获得与使用JavaAPI时一样好的性能。如果您自己缓存区域位置并点击相应的Thrift服务器,这可能会有所帮助,但即使这样,也会进行额外的JavaAPI调用,即使它最终位于本地服务器上。这将有助于此场景,但CDH3u4或CDH4中不包括这一点


*有一个问题实际上是在Regionserver中嵌入了Thrift服务器。

谢谢!我来试试这个。关于扩展部分:因此,如果我随机直接连接到不同的区域服务器,并将写操作分散到不同的区域服务器,那么当我读取它们时,是否保证得到一致的结果?(我的HBase应用程序是写密集型的,尽管我经常也要读。)这是一个很好的问题。不,使用随机分配不会获得最佳性能。我敦促大家阅读本期有关其中一些问题的文章。对于读取(和写入),如果缓存区域位置并直接连接到该区域服务器,则可能会有所帮助。这就是说:目前,即使您在您的数据将结束的Regionserver上写入Thrift server,该Thrift server仍将执行网络请求,即使它结束于
localhost
。恐怕这就是目前的情况(再次参见HBASE-4460)。我已经编辑了答案,以纳入我之前的评论。我希望这能让事情变得更清楚,并对你有所帮助。接下来,我要说的是:我让这一切顺利进行!并且我能够在HBase中扩展写操作。:)让集群运行、在区域服务器上节约、安全规则等并不是一件简单的事情——但让它以这种方式运行完成了任务!:)谢谢很抱歉,还有一个小问题:如果我在区域服务器之间随机分配写操作,那么区域服务器如何相互同步?它们甚至需要同步吗?一旦我完成了随机排列的写作,我该如何进行查询?