通过一个流或同时通过多个服务器向hbase发送数据是否更好?

时间:2011-10-03 17:06:34

标签: database hbase

如果这个问题是基本的,我很抱歉(我是nosql的新手)。基本上我有一个很大的数学过程,我正在拆分并有不同的服务器进程并将结果发送到hbase数据库。计算数据的每个服务器都是一个hbase区域服务器,并且有节俭。

我在考虑每个服务器处理数据,然后在本地更新hbase(通过thrift)。我不确定这是否是最佳方法,因为我不完全了解主(命名)节点将如何处理上传/拆分。

我想知道在上传大量数据时最佳做法是什么(总的来说我怀疑它会是几百万行)?可以将它发送到区域服务器,还是应该通过主服务器?

1 个答案:

答案 0 :(得分:2)

来自this博文,

  

一般流程是新客户端联系Zookeeper仲裁(a   单独的Zookeeper节点集群)首先找到一个特定的行   键。它通过检索服务器名称(即主机名)来实现   从Zookeeper托管-ROOT-区域。有了这些信息,它可以   查询该服务器以获取承载.META的服务器。表。都   这两个细节都被缓存,只查找一次。最后它可以   查询.META。服务器并检索具有该行的服务器   客户正在寻找。

     

一旦被告知行所在的位置,即在哪个区域,它   缓存此信息并与HRegionServer主机联系   该地区直接。所以随着时间的推移客户端非常完整   从哪里获取行而不需要查询.META的图片。   再次服务器。

我假设您直接使用thrift接口。在这种情况下,即使您从特定区域服务器调用任何变异,该区域服务器也仅充当客户端。它将联系Zookeeper仲裁,然后联系Master以获取写入数据的区域,并以与从其他regionserver写入的方式相同的方式继续。

  

可以将它发送到区域服务器,还是应该通过主服务器?

两者都是一样的。没有直接写入regionserver的事情。必须联系Master才能确定将输出写入哪个区域。

如果您正在使用hadoop map-reduce作业,并使用Java API进行mapreduce作业,那么您可以使用TableOutputFormat直接写入HFile而无需通过HBase API。它比使用API​​快约10倍。