hbase由google的bigtable設計而來的面向列族的儲存的非關聯式資料庫,主要偏向適合資料分析。
列式資料庫優點,列式資料庫會把相同列的資料都放在一塊即列為單位儲存。當我們查詢某一列的時候只需要調出相應的塊即可,這樣還可以減少很多i/o。
高壓縮比
如果資料元素間的相似性很高的話可以進行大幅度的壓縮,相似度越高壓縮比越大。即節約了空間又減少了i/o,從而提高效能。
高併發,極易擴充套件
hbase的極易擴充套件主要體現在兩個方面,乙個是基於上層處理能力(regionserver)的擴充套件,通過橫向新增regionsever的機器,提公升hbase上層的處理能力。
乙個是基於儲存的擴充套件(hdfs),通過新增datanode的機器,進行儲存層擴容,提公升hbase的資料儲存能力和提公升後端儲存的讀寫能力。
稀疏性
稀疏主要是針對hbase列的靈活性,在列族中,你可以指定任意多的列,在列資料為空的情況下,是不會占用儲存空間的。
半結構化或非結構化資料:
對於資料結構字段不夠確定或雜亂無章非常難按乙個概念去進行抽取的資料適合用hbase,因為hbase支援動態新增列。
多版本號資料:
依據row key和column key定位到的value能夠有隨意數量的版本號值,因此對於須要儲存變動歷史記錄的資料,用hbase是很方便的。比方某個使用者的address變更,使用者的address變更記錄也許也是具有研究意義的。
業務場景簡單:
不需要太多的關係型資料庫特性,列入交叉列,交叉表,事務,連線等。
hbase的缺點:
單一rowkey固有的侷限性決定了它不可能有效地支援多條件查詢
不適合於大範圍掃瞄查詢
不直接支援 sql 的語句查詢
hmaster負責對region分配到具體的region server,並監控region server狀態(差分合併),資料庫表ddl(元資料操作)操作,維護整個集群的負載均衡。
此外,zookeeper還記錄了meta表的路由資訊。
region server合併差分region ,對資料dml進行增刪改查,region server直接對接使用者的讀寫請求,是真正的「幹活」的節點。執行在hdfs datanode上的region server包含如下幾個部分:
注意:meta table中儲存了集群region的位址資訊,記錄了當前要查的表由哪些region server服務,哪些region存在哪region server,同時meta table也是存在指定的region server裡,這個位置資訊由zookeeper中會儲存。
meta table的結構如下:
鍵:region的起始鍵,region id。
值:region server
資料到region server 後,後面的就由region server服務。
1)將資料寫入到wal,寫入wal後客戶端即收到ack響應。
2)wal資料會寫入到memstore中
3)當memstore積累了足夠的資料,整個memstore中的資料集會一次性flush寫入hfile。由於memstore中的keyvalues是有序的,flush寫入過程是磁碟順序寫入,因此flush速度很快。注:在flush的時候,在同乙個flush(同乙個記憶體中)裡面不會保留過期的版本(小事件搓的被覆蓋的)資料,會把被覆蓋的資料刪除掉,然後再把資料flush到hfile裡。刪除標記會保留。
4)這樣頻繁的flush會形成很多小的hfile,當積累到一定層度執行compaction(合併)來合併小的hfile,將對應於某乙個column family的所有hfile重新整理並合併為乙個hfile,並在這一過程中刪除已經刪除或過期的cell,更新現有cell的值。
小合併會保留過期的版本(小事件搓的被覆蓋的)資料
大合併不會保留過期的版本(小事件搓的被覆蓋的)資料,會把被覆蓋的資料刪除掉,不會保留刪除標記
到達region server 後
首先,掃瞄器查詢讀快取blockcache,當需要記憶體時,使用lru演算法替換最近最少使用的快取
然後,掃瞄器查詢寫快取memstore,寫快取包含著最近的寫入資料
最後,如果掃瞄器沒有在blockcache和memstore中找到該行資料的全部keyvalues,那麼掃瞄器會使用blockcache索引和布隆過濾器把hfile載入到記憶體,查詢制定行的資料。
hbase的get/scan操作流程,是通過bloomfilter進行過濾,減少不必要的strorefile讀取。
bloomfilter是乙個列族級別的配置屬性,如果在表中設定了bloomfilter,那麼hbase會在生成storefile時,包含乙份bloomfilter結構的資料,稱其為metablock;metablock與datablock(真實的keyvalue資料)一起由lrublockcache維護,所以開啟bloomfilter會有一定的儲存及記憶體cache開銷。
hbase中的bloomfilter的型別包括:
row:根據keyvalue中的row來過濾storefile。
舉例:假設有2個storefile檔案sf1和sf2,
sf1包含kv1(r1 cf:q1 v)、kv2(r2 cf:q1 v)
sf2包含kv3(r3 cf:q1 v)、kv4(r4 cf:q1 v)
如果設定了cf屬性中的bloomfilter為row,那麼get(r1)時就會過濾sf1,get(r3)就會過濾sf2
rowcol:根據keyvalue中的row+qualifier來過濾storefile。
舉例:假設有2個storefile檔案sf1和sf2,
sf1包含kv1(r1 cf:q1 v)、kv2(r2 cf:q1 v)
sf2包含kv3(r1 cf:q2 v)、kv4(r2 cf:q2 v)
如果設定了cf屬性中的bloomfilter為row,
無論get(r1,q1)還是get(r1,q2),都會讀取sf1+sf2;
而如果設定了cf屬性中的bloomfilter為rowcol,那麼get(r1,q1)就會過濾sf2,get(r1,q2)就會過濾sf1
Hbase 學習筆記 Hbase 概覽
hbase構建在 hdfs 之上,hbase內部管理的檔案全部儲存在hdfs 中 行鍵,table的主鍵,table中的記錄按照row key排序。型別為byte array 列簇,table在水平方向有乙個或者多個column family組成,乙個column family中可以由任意多個col...
Hbase學習筆記
1.table中行是按照row key的字典序排列的 2.在行的方向上分隔為多個region 3.hregion是hbase 中分布式儲存和負載均衡的最小單位,這表示不同的region可以分布在不同的regionserver上 當乙個region足夠大時,現在是256m 就會split,乙個regi...
HBase學習筆記
hbase簡介 1 hbase定義 hbase是一種分布式 面向列的開源資料庫。具有良好的擴充套件性 低寫入 查詢延遲的特點。2 hbase與傳統的關聯式資料庫的區別 hbase rdb 資料型別 簡單的,儲存為未經解釋的字串 豐富的資料型別和儲存方式 資料操作 只有簡單的插入 查詢 刪除和清空等 ...