Hbase的基本概念及交互過程

jopen 12年前發布 | 3K 次閱讀 5.2.1版本發布

 Hbas是一個在HDFS上實現的面向列的分布式數據庫,非常適合實時地隨機讀/寫超大規模數據集

 

,列族,,主鍵

      Hbase中的行類似于數據庫中的行,表中的行根據行的鍵值(也就是表的主鍵)進行排序,排序根據字節序進行,所有對表的訪問都要通過表的主鍵

 行中的列分成列族”,所有的列族成員有相同的前綴.company:name,company:address都是列族company的成員,Hbase中為了方便,使用冒號(:)來分隔列族和列族修飾符.一個表的列族必須作為表模式定義的一部分預先給出,但是新的列族成員可以隨后按需加入.例如,目標表中有了列族company,那么客戶端可以在更新時提供新的列company:logo,服務端會存儲它的值.物理上,所有的列族成員都一起存儲在文件系統中,所以說,Hbase是一個面向列族的存儲器.由于調優和存儲都是在列族這個層次上進行的,所以最好使所有的列族成員都有相同的訪問模式和大小特征.

簡而言之,Hbase表和數據庫表類似,行是排序的,只要列族預先定義存在, 客戶端隨時可以把列添加到列族中去.

 

區域

        Hbase把表水平劃成區域,每個區域由表中行的子集構成.一開始,一個表只有一個區域,但是隨著表的區域開始變大,,等到開始超過設定的大小闕值,便會在某行的邊界上分成兩個大小基本相同的新分區.在第一次劃分之后,所有加載的數據都放在原始分區所在的那臺服務器上,隨著表的變大,區域的個數開始增加,有些區域也會被放到集群上的其他節點上.區域是Hbase集群上分布數據的最小單位,每個節點都負責管理表中區域的一個子集,在線的所有區域按次序排列就構成了表的所有內容.

 

       無論對行進行訪問的事務涉及多少列,對行的更新都是原子,這使得Hbase鎖模型能夠盡量簡單

 

Hbase實現

         Hbase由一個Master節點負責協調管理一個或多個RegionServer從屬機.Master負責啟動,把區域分配給注冊的RegionServer,恢復RegionServer的故障. Master負載很輕. RegionServer負責零個或多個區域的管理以及響應客戶端的讀寫請求, RegionServer還負責區域的劃分,并通知Master有了新的子區域Hbase依賴于Zookeeper.如果區域的分配過程中有服務器崩潰,就通過Zookeeper來協調,分配,Zookeeper分配事務狀態有助于在恢復時可以從崩潰遺留的狀態開始繼續分配.在啟動一個客戶端到集群上的連接時,客戶端必須至少拿到集群所傳遞的Zookeeper整體的位置.這樣,客戶端才能訪問Zookeeper的層次,了解集群的屬性,如服務器的位置.

 

運行中Hbase

Hbase中保留著-ROOT-.META.的特殊目錄,它們維護著當前集群上所有區域的列表,狀態,位置.ROOT表維護著Meta表的信息,Meta表維護著用戶表的信息, Meta表中的項使用區域名作為主鍵,區域名由所屬的表名,區域的起始行,創建的時間戳進行哈希后的結果組成.區域變化時,即分裂,禁用/啟用.刪除,為負載均衡重新部署機器或由于Regionserver崩潰而重新部署區域時,目錄表都會相應進行更新,這樣,集群上所以區域的信息都能保持是最新的.

客戶端的每一個行操作都要訪問三次遠程節點:

         1.       Zookeeper獲取Master的位置

         2.       Master獲取.Meta.表的信息

         3.       根據.Meta.表的信息,獲取region位置信息

      為了減少訪問遠程節點,Hbase客戶端會緩存它們遍歷ROOT表時獲取的信息和Meta表位置以及用戶空間的區域的開始行和結束行,這樣不用訪問Meta表也能得知區域存放的位置.當客戶端碰到錯誤時會再去查看Meta獲取區域的新位置,如果.Meta也移動了,就去查詢ROOT

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!