1. 程式人生 > 其它 >Hbase基本原理(轉載)

Hbase基本原理(轉載)

Hbase基本原理:

1.hbase的邏輯儲存結構

  • 1.每條資料都具有一個rowkey,其具有唯一性,相當於mysql表中的主鍵(primary key)。

  • 2.其次是有一個列簇,相當就是列的集合,一個列簇在對應物理儲存上相當於一個資料夾,當一個列簇中的欄位越來越多的時候,就需要對錶進行縱向的切分,便有了列簇的概念。

  • 3.當表中的資料越來越多的時候,表就會變的越來越高,需要對錶進行橫向的切分,這個切片就是region。

    hbase的表其實就是kv結構的,只不過這個v是個多維的結構。

2.Hbase的物理儲存結構

由上圖可以看出,在Hbase中一條資料會被當成多條來儲存。每一條Hbase儲存的資料都有完整的row key,列簇,列,時間戳和操作型別。

3.Hbase和mysql的對比

4.Hbase的優勢

  • 1.橫向擴充套件:當現有服務出現瓶頸不需要停止現有的叢集來提升配置,只需要在現有執行的叢集中新增行的機器節點即可,一旦新的RegionServer建立完成,叢集會開始重新調整。
  • 2.列式儲存:Hbase是面向來儲存的,每個列都單獨儲存,所以在Hbase中列是連續儲存的,行不是。列可以動態的進行新增,列為空時就不會進行儲存,節省空間。
  • 3.半結構化或者非結構化資料:Hbase支援半結構化或者非結構化的資料儲存,因為對於資料欄位不夠確定或者雜亂無章非常難按一個概念去進行抽取的資料非常適合。
  • 4.高併發,隨機讀寫:Hbase採用LSMT架構(log structured merge tree)進行設計,會週期性地將小檔案合併成為大檔案以減少磁碟訪問同時減少NameNode壓力。解決了HDFS不能隨機讀寫的問題,在寫入資料方面有很大的優勢,特別是在pb級資料上面明顯。
  • 5.自動切分:Hbase的資料是存在多個Region Server中的Region組成的,這些RegionServer又分佈在不同的dataNode上面,如果一個region增長到一個閾值,為了減少負載均衡和減少IO,HBase會自動的或者手動干預將該Region切分成更小的region,也稱之為subRegion。
  • 6.自動故障處理和負載均衡:Hbase是執行在HDFS之上的,Hbase的資料都是以多副本的方式來存放,資料也是分散式存放,資料的恢復可以得到保障。

5.Hbase的基本架構和原理

  • 5.1Region Server(RS)

    是Region的管理者,其實現類是HRegionServer,主要作用:

    • 對資料的操作get,put,delete

    • 對region的操作,splitRegion,compactRegion

      Rs相當實現是在關係型資料庫中DML的操作,實現的是資料的管理。

  • 5.2Master

    Master時所有RS的管理者,其實類是HMaster,主要作用:

    • 對於表的操作create,delete,alter
    • 對於region Server的操作,分配region到每一個RS,監控每一個RS的狀態,負載均衡和故障轉移,發現失效的RS重新為他們分配自己負責的region。
    • hdfs上面的垃圾回收,標記為刪除而且經過major compact的檔案。
  • 5.3zookeeper

    Hbase通過zookeeper來做master的高可用,Rs的監控元資料的入口以及叢集配置的維護工作。

    • 負責Master高可用是切換工作。
    • 降低Master的負擔,承擔Master的部分工作。
  • 5.4HDFS

    HDFS為Hbase提供最底層的資料儲存服務,同時為Hbase提供高可用的支援,底層的最終儲存是構建在HDFS之上的。

6.Hbase的核心元件

一個Rs是由一個HLog(預設是一個,1.1版本可以開啟多個HLog),一個BlockCache以及多個Store組成。

  • Hlog是用來保證資料寫入的可靠性,
  • BlockCache是可以將資料快取到記憶體中以提升資料讀取效能;
  • Region是HBase中資料表的一個數據分片,每個表中可以有多個分割槽,對資料的橫向切分。同時一個RS上面通常會負責多個region的資料讀寫。一個region通常包含多個Store。
  • store存放的是對應列簇的資料,如一個表中有有兩個列簇,那麼在每個region中就會有兩個store。每個store中有且僅有一個MemStore和多個HFile。使用者資料寫入時會將對應的列簇資訊寫入到Memstre中,同時一旦寫入的資料超過了設定的閾值,系統會將Memstore中的資料落盤形成HFile檔案。HFile存放在HDFS之上,是一種定製化的資料儲存檔案,方便使用者進行資料讀取。其結構關係如下圖所示。
  • storeFile 儲存資料的物理檔案,StoreFile以HFile的形式儲存到HDFS上,每個Store會有一個或者多個StoreFile(HFile),資料在每個StroreFile中是有序的,HFile可以理解為一種檔案格式,像doc,txt等一樣的概念,之不是是以key,value的形式儲存。
  • MemStore寫快取,由於HFile中資料要求是有序的,所以資料是先存到MemStore中,排好序後,等到達刷寫時才會刷寫到Hfile中,每次刷寫都會形成一個新的Hfile。
  • HLog由於資料要經過mem store排序後才會寫到hfile中,但把資料儲存到記憶體中會有很高的概率導致資料丟失,為了解決這個問題,資料在寫入MemStored的同時,也會寫在一個叫做write-ahead-logfile的檔案中,當系統出現問題時,資料就可以通過這個日誌檔案來重建。wal類似於msyql的binlog,用來做災難恢復,Hlog記錄所有資料的變更,一旦資料修改,就可以從Hlog恢復,每個HRegionServer維護一個Hlog。
  • HRegion 就是所說的region,一個tabel由一個或者多個region組成,一個region可以看成table按照行切分且有序的資料塊,每個region都有自身的StartKey,EndKey。一個region由一個store或者多個store來組成,每個store中都相當於一個列簇,相同列簇中的列都儲存在一個store中,同一個tabel的region會分佈到叢集中不同的RS中以實現讀寫請求的負載均衡,所以一個RS中會包含來自不同table中的N個region。

7.Hbased的寫入資料過程

寫入流程:寫流程:
1)Client 先訪問 zookeeper,獲取 hbase:meta 表位於哪個 Region Server。
2)訪問對應的 Region Server,獲取 hbase:meta 表,(同時meta table是不會被split的)根據讀請求的 namespace:table/rowkey,查詢出目標資料位於哪個 Region Server 中的哪個 Region 中。並將該 table 的 region 資訊以及 meta 表的位置資訊快取在客戶端的 meta cache,方便下次訪問。
3)與目標 Region Server 進行通訊;
4)將數分別寫入HLog和MemStore中,資料會在MemStore 進行排序(若MemStore中資料有丟失,則可以從HLog中進行恢復);
5)向客戶端傳送 ack;(當寫入到記憶體時就可立即返回,代表寫入成功,這也是Hbase,I/O高效能的保證)
6)當MemStore 的資料達到一定閾值後,將資料刷寫到StoreFile檔案。
7)當多個StoreFile檔案達到一定大小後會觸發Compact操作,合併為一個StoreFile,這裡同時進行版本的合併(更新)及資料的刪除
8)當Compact後會逐步形成越來越大的StoreFile,此時會觸發Split操作,把當前的StoreFile進行分割,相當於一個大的Region進行分割的過程,大的Region分割成兩個。

原文連結:https://blog.csdn.net/godlovedaniel/article/details/104533109

知之為知之,不知為不知