HBase海量業務數據二級查詢實現毫秒級響應,HBase原理與數據模型設計詳解

    HBase是一個面向列的數據庫,在表中它由行排序。表模式定義只能列族,也就是鍵值對。一個表有多個列族以及每一個列族可以有任意數量的列。後續列的值連續地存儲在磁盤上。表中的每個單元格值都具有時間戳。表是行的集合,行是列族的集合,列族是列的集合,列是鍵值對的集合。

爲什麼需要使用HBase做海量業務數據的存儲

1、擴展性強、容量大,支持百億行、百萬列數據的存儲。HBase底層基於HDFS,可動態增加節點

2、高可靠性,WAL機制保證數據的安全性,Replication機制保證集羣的數據容災能力

3、高性能,實時讀寫。由於底層的LSM數據結構和RowKey有序排序,HBase具備較好的隨機讀取性能,RowKey的查詢可達毫秒級響應

4、稀疏性、面向列存儲,空列不佔空間,且可動態添加,獨立檢索

5、支持多版本,每列的數據可存儲多個版本,這一特性使得HBase能比較輕鬆的實現類似用戶歷史記錄的功能

主從式架構

主服務器
    分配區域給區域服務器並在Apache ZooKeeper的幫助下完成這個任務。
    處理跨區域的服務器區域的負載均衡。它卸載繁忙的服務器和轉移區域較少佔用的服務器。
    通過判定負載均衡以維護集羣的狀態。
    負責模式變化和其他元數據操作,如創建表和列。

區域服務器
    與客戶端進行通信並處理數據相關的操作。
    句柄讀寫的所有地區的請求。
    由以下的區域大小的閾值決定的區域的大小

Zookeeper
    在模擬和獨立模式,HBase由zookeeper來管理。Zookeeper是一個開源項目,提供管理服務,如維護配置信息,命名,提供分佈式同步等;Zookeeper代表不同區域的服務器短暫節點。主服務器使用這些節點來發現可用的服務器。除了可用性,該節點也用於追蹤服務器故障或網絡分區。客戶端通過與zookeeper區域服務器進行通信。

     Zookeeper 用來協調分佈式系統中集羣狀態信息的共享。Region Servers 和 在線 HMaster(active HMaster)和 Zookeeper 保持會話(session)。Zookeeper 通過心跳檢測來維護所有臨時節點(ephemeral nodes)。
    每個 Region Server 都會創建一個 ephemeral 節點。HMaster 會監控這些節點來發現可用的 Region Servers,同樣它也會監控這些節點是否出現故障。
    HMaster 們會競爭創建 ephemeral 節點,而 Zookeeper 決定誰是第一個作爲在線 HMaster,保證線上只有一個 HMaster。在線 HMaster(active HMaster) 會給 Zookeeper 發送心跳,不在線的待機 HMaster (inactive HMaster) 會監聽 active HMaster 可能出現的故障並隨時準備上位。
    如果有一個 Region Server 或者 HMaster 出現故障或各種原因導致發送心跳失敗,它們與 Zookeeper 的 session 就會過期,這個 ephemeral 節點就會被刪除下線,監聽者們就會收到這個消息。Active HMaster 監聽的是 region servers 下線的消息,然後會恢復故障的 region server 以及它所負責的 region 數據。而 Inactive HMaster 關心的則是 active HMaster 下線的消息,然後競爭上線變成 active HMaster。

HBase怎麼做到海量數據存儲和秒級響應的

    通過切分表、BlockCache,Block索引和布隆過濾器等技術,實現了單表海量數據的毫秒級查詢。   

你真的正確建立HBase數據模型了嗎

列簇的合理設計,結合業務設計一張大表的列簇時,應不超過5個

1.行鍵在表設計中非常重要,決定着應用中的交互以及提取數據的性能。

2.hbase表示非常靈活的,你可以使用字節數組存儲任何數據。

3.存錯任何數據到列族中,都可以使用相同的訪問模式來訪問數據。

4.索引僅僅是行鍵,好好利用,將成爲你的優勢。

5.深度高的表結構,可以使得你快速且簡單的訪問數據,但是卻丟掉了原子性。寬度廣的表結構,可以保證行級別的原子操作,但每行會有很多的列。

6.你需要好好的思考你的表設計,使得可以使用單條API就可以操作,而不是使用多條。hbase不支持跨行的事務,也儘量避免在客戶端代碼中使用這樣的邏輯。

7.行鍵的哈希可以使得行鍵有固定的長度和更好的分佈。但是卻丟棄了使用字符串時的默認排序功能。

8.列標識可以用來存儲數據,就像單元數據一樣。

9.列標識的長度影響數據存儲的足跡。也影響硬盤和網絡IO的花銷,所以應該儘量簡潔。

10.列族名字的長度影響到發送到客戶端的數據長度。所以儘量簡潔。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章