HBase總結-基礎篇

一.HBase特點:

1.弱視圖,HBase是一種高效的映射嵌套,用戶可以在運行時定義列,每一行都有屬于自己的列。

2.非標準化數據。

二.HBase表組成

1.行健,按字典順序存儲。

2.列簇,一組列的集合

3.單元格,列和行的交集是一個單元格,單元格是版本化的(默認使用時間戳),最新的版本在最前邊,默認保三個版本。單元格中的數據以二進制字節數組存儲。

三.列簇

1.列簇必須在創建表的時候定義。

2.每個列簇中的列數是沒有限制的。

3.同一列簇下的所有列會保存在一起。一個HFile文件保存一個列簇的數據。

4.列在列簇中是有序的,按照字典順序排列。

5.列可以在運行時動態創建。

6.列只有在插入數據后才會存在,空值不保存,不占存儲空間。

四.HBase存儲設置

1.壓縮格式,默認無壓縮,可以使用GZ、LZO、SNAPPY

2.HBase默認塊大小是64K,不是64兆,因為HBase需要支持隨機訪問,一旦在查詢的時候找到行健所在的塊,就會對應塊的單元格數據取出,對64k大小的塊進行掃描的速度明顯快與64M。

3.內存模型:默認false,如果設置為true,HBase會嘗試將整個列簇保存在內存中。

4.塊緩存,默認true,HBase使用塊緩存將最近使用的塊加載到內存中。塊緩存使用最近沒有使用(LRU)的原則刪除塊數據。

5.布隆過濾,是一種空間高效的數據結構,可以設置為ROW,使用行級的布隆過濾,ROWCOL使用行健與列標識級別的布隆過濾。

五.HBase組件

架構圖(官方圖)


1.Zookeeper

主要職責:支持遠程組件之間的松散耦合消息機制,組件之間通過心跳機制協調他們的狀態和健康信息。

2.Master

集群環境中可以同時存在多個主節點,但是同一時間只有一個扮演主節點的角色,其他節點作為備用節點,如果主節點與zk的租約過期,剩下的備用節點重新發起競爭,由zk選舉主節點。

功能:執行集群管理操作,跟蹤數據位于哪個節點上(行健鑒別),控制負載均衡和故障切換,主節點不直接獲取RegionServer信息,通過zk獲取各RegionServer運行狀態。

3.RegionServer(分區服務器)

主要負責管理多個分區,數據實際存儲在分區中,每一個RegionServer有一個WAL文件(預寫日志)和塊緩存,預寫日志文件存儲在hdfs,防止丟失。該RegionServer上的所有分區共享WAL和塊緩存.

4.WAL

功能:確保數據不丟失,如果發生故障,可以使用WAL恢復數據。

WAL中保存了分區服務器還沒有寫入HFile的所有操作。寫入WAL之后再寫入MemStore,當MemStore的大小達到預設的值時,將數據寫入HFile固化到磁盤。如果想提高寫入性能可以關閉WAL,但是會有數據丟失的風險。

5.塊緩存

是一種內存結構,遵循LRU(最近沒有使用)回收規則,默認對表是開啟的。通過SCAN和GET獲取的數據都會加載到緩存。0.96版本之后支持使用JAVA NIO實現的堆外緩存,這個優化大大減小了RegionServer的GC壓力。

6.分區

一個RegionServer上有多個分區,每一個分區對應一張表,管理表中一定范圍行健內的行數據,分區的行健范圍不必是連續的,分區對于表中不同列簇是分開存儲的,一個HFile存儲一個列簇的數據。

7.MemStore

當HBase有更新操作時,先寫入WAL再寫入MemStore(內存結構),預定義MemStore大小配置hbase.hregion.memstore.flush.size。每一次持久化操作都會針對分區中的每一個列簇創建一個HFile文件,當用戶讀取數據時先從MemStore中讀取數據,如果沒有在MemStore中找到對應的值才會嘗試從HFile文件中讀取。

注意:MemStore的持久化過程是阻塞的,此時不能提供服務。

早期的MemStore使用堆內存實現,會產生大量的堆內存碎片,并導致周期行的FullGC,FullGC會導致程序暫停。

8.HFile文件

最終保存HBase數據的文件(存儲于HDFS),一個HFile文件屬于一張表的一個列簇,數據以行健和列的字典順序排列,同時單元格內的數據是以版本號降序排列。多個RegionServer的MemStore多次持久化的HFile文件,他們之間是無序的,HBase會通過部分壓縮和全量壓縮進行合并。當HFile文件的數量達到一定的閾值,就會啟動部分壓縮,將多個HFile文件合并為一個大的HFile文件。全量壓縮會在每天的固定時間段進行(系統活躍度低的時間)。合并的過程會對數據重新排序,保證合并后的文件數據依然是有序的。

9.兩個重要的表-Root-.META.

-Root-保存.META.的路徑,它指向.META.在集群的哪個節點上。是唯一不會被拆分的表。

.META.保存集群中每個分區的元數據,關鍵的類HRegionInfo,包括表的信息,表的起始行健值和終止行健值。


六.客戶端與HBase建立連接的過程

A.Client與ZK集群建立連接,從ZK集群獲取-Root-表位置信息。

B.Client連接-Root-表,并得到.META.表的位置信息。

C.Client連接.META.表并下載分區列表和他們的位置。

D.Client使用從.META.表下載的信息直接連接RegionServer中的分區操作數據,在這過程中Clien會進行一系列的查詢操作。

E.Client會將-Root- .META.周期性的下載到本地,當Client連接RegionServer后發現.META.表提供的行健范圍不在分區中才會重新刷新本地目錄表緩存。


七.分區與壓縮

如果在創建表是沒有設置預分區,剛創建表時只有一個分區,直到該分區的大小達到habse.hregion.max.filesize屬性值時默認10G,該分區會再次分區,注意此時的分區是邏輯分區,只記錄分區的行健。分區大小會繼續增長,只有在全量壓縮的時候才會把邏輯分區轉為物理分區,將原始數據文件拆開到其他分區HDFS路徑下的不同文件中。原始分區將在物理上分成兩個分區,并且這兩個分區屬于不同的兩臺RegionServer。

壓縮是分區中HFile文件合并的過程,減少HFile的數量能夠提高HBase的性能。因為能夠減少scan和get讀取的文件數。壓縮分兩種:部分和全量。

部分壓縮,會把多個HFile文件壓縮成一個,部分壓縮的過程,Client仍然可以向MemStore寫數據,但是不執行MemStore的持久化,如果MemStore被寫滿,此時暫停對外服務,與該分區交互的Client處于阻塞狀態,直到壓縮過程執行完畢,恢復操作。

全量壓縮,將一個分區內所有的HFile文件合并成一個文件,在這個過程所有的刪除操作和版本過期的單元格都會被移除。全量壓縮默認每天執行一次。(提示:HBase的刪除操作并不會在執行完刪除命令后就立即刪除數據,而是先給該數據打上被刪除的標簽,在全量壓縮的過程中才會被真正的刪除

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,247評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,520評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,362評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,805評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,541評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,896評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,887評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,062評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,608評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,356評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,555評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,077評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,769評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,175評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,489評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,289評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,516評論 2 379

推薦閱讀更多精彩內容

  • 簡介 [HBase]——Hadoop Database的簡稱,Google BigTable的另一種開源實現方式,...
    高廣超閱讀 2,369評論 1 27
  • HBase存儲架構圖 HBase Master 為Region server分配region 負責Region s...
    kimibob閱讀 5,608評論 0 52
  • 最近在逐步跟進Hbase的相關工作,由于之前對Hbase并不怎么了解,因此系統地學習了下Hbase,為了加深對Hb...
    飛鴻無痕閱讀 50,299評論 19 272
  • HBase Architectural Components(HBase架構組件) HBase架構也是主從架構,由...
    陌上疏影涼閱讀 2,419評論 0 7
  • 啟動集群: 1)啟動所有的zookeeper,start-all-zookeeper.sh 2)主節點最好一個進程...
    夙夜M閱讀 481評論 0 3