2011-03-24 64 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