2011-03-24 27 views
15

我目前正在评估HBase作为数据存储,但有一个问题没有得到答案:HBase在许多节点(又名复制)上存储同一对象的许多副本。由于HBase具有所谓的强一致性(相对于最终一致性),它保证每个副本在读取时都返回相同的值。HBase:复制是如何工作的?

正如我所了解的HBase概念,在读取值时,首先查询HBase主服务器(必须有多个)RegionServer提供数据。然后,我可以发出读取和写入请求,而无需发明主人。那么复制如何工作?

  • HBase如何提供一致性?
  • 写操作在内部如何工作?
  • 写操作块直到写入所有副本(=>同步复制)。如果是,谁来管理这个转移?
  • HDFS如何进入游戏?

我已经阅读了BigTable的 -Paper和搜索的文档,但我发现HBase的体系结构没有进一步的消息。

谢谢!

回答

16

hbase不会按照您的想法进行任何复制。它建立在HDFS之上,为构成hbase表的数据块提供复制。但是,只有一个区域服务器曾经为任何给定的行提供或写入数据。

通常,regionservers与数据节点共置。如果可能,HDFS中的所有数据写入首先到本地节点,同一机架上的另一个节点和另一个不同机架上的另一个节点(HDFS中的复制因子为3)。所以,一个地区服务器最终会以从本地服务器提供的所有数据结束。

至于阻塞:唯一的阻塞是直到WAL(写入提前日志)刷新到磁盘。这保证没有数据丢失,因为日志总是可以重播。请注意,较早版本的hbase没有解决这个问题,因为直到最近HDFS才支持持续追加操作。目前我们处于一种奇怪的状态,因为没有官方的Apache Hadoop版本支持append和HBase。同时,您可以自己应用追加补丁,也可以使用Cloudera发行版(推荐)。

HBase确实有一个相关的复制功能,可以让您将数据从一个群集复制到另一个群集。

+0

大卫,我遇到了这些命令, http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/cdh_bdr_hbase_replication.html =>在主: “创建”在'从': '创建't1',{NAME =>'f1',KEEP_DELETED_CELLS =>'true'}“ So这意味着HBase可以控制其数据的复制? – 2015-02-06 11:22:47

+1

链接的HBase复制是指跨数据中心复制数据,而不是跨集群中的节点 – David 2015-02-11 00:18:29