hbase是乙個列式儲存的非關係型資料庫,依賴於zookeeper。資料儲存於hdfs上,主節點是hmaster,從節點是hregionserver.
hbase與關係型資料庫相比較優點如下:
1. hbase資料儲存於hdfs上,可擴充套件性強。資料條目數可以儲存上一條。
2. 通過rowkey檢索資料,速度可以準實時,達到秒級別。
3. 寫資料非常快,只要寫在region的memstore記憶體中即可,不需要重複io消耗。
4. 每份資料都有多份備份,保證資料安全性。
5. 從成本上來說關係型資料庫要用到商用小型機,**要幾百萬非常昂貴。但是hdfs只需要普通的商用server,只要幾萬一台。
每個錶剛開始只有乙個region,region的strartrowkey和endrowkey都是空的。當region的大小超過一定的閥值後,就會按照key的中間值**成兩個region,老的region下線。比如中間值是111000,則新的2個region如下:
null
region1
111000
region2
null
rowkey按照大小排序,新的rowkey會按照大小插入對應的region
1)get rowkey
2)scan range --> 最多的
3)scan
hbase架構圖
客戶端對資料的讀和寫首先連線zookeeper,在zookeeper中找到meta-region-server節點,meta表被哪個regionserver管理。
meta表只有乙個region,客戶端通過表+rowkey在meta表中找這個表的rowkey被哪個regionserver管理。meta表儲存了對應的主機埠,找到後執行相應的操作。
list_namespace_tables 'hbase'
檢視hbase命名空間下的表
scan 'hbase:meta'
檢視meta表資訊
客戶端通過zookeeper找到相應的regionserver後找到對應的region。
hmaster連線zookeeper,知道哪些regionserver是活著的
在get /hbase/rs
znode節點中,乙個regionserver有乙個目錄[主機,埠,啟動時間]
一張表有1個或多個region,region有幾個列簇就有幾個store。每個store中有乙個memstore和0個或多個storefile。
storefile是存在hdfs上的二進位制檔案,讀資料先到memory中讀,沒有在去storefile中讀
在寫資料的時候先往hlog寫乙份,在往memstore中寫乙份。當memory達到一定大小後,flush到storefile裡面去。
注意:
這樣做的目的是為了當memstore節點掛掉後,重新啟動可以通過hlog恢復
當storefile超出一定大小後會**成兩個storefile
3.只有當多個storefile合併時,原本刪除的資料才會真正的刪除,之前只是cell打乙個標籤不讓其顯示
優化:
將具備共同io特性的column放在乙個列簇中,提高讀取速度
乙個regionserver管理多個region,每個region都有乙個memstore所以regionserver記憶體可以設定大一點。
老版本是乙個regionserver乙個hlog,而新版本可以設定乙個region乙個hlog。
老版本對資料恢復需要分割日誌,而新版本可以直接對region的日誌做資料還原。但是需要消耗更多的io,因為要同時開啟多個hlog。
client寫入-》存入memstore,一直到menstore滿-》flush成乙個storefile,直至增長到一定閥值-》觸發合併操作-》多個storefile合併後,逐步形成越來越大的storefile-》單個storefile大小超過一定閥值後,觸發split操作,把當前region 分成2個region,region下線。新split出的2個孩子region會被hmaster分配 到相應的hregionserver上,使得原先的region的壓力分流道2個region上
注意:
hbase只是增加資料,所有的更新和刪除操作,都是在檔案合併階段做的。所以使用者寫操作只需要進入記憶體即可立即返回,從而保證i/0高效能
client訪問hbase上資料的過程並不需要master參與(定址訪問zookeeper和hregion server)資料讀寫訪問hregion server,hmaster僅僅維護table和region的元資料資訊,負載很低
注意:hbase-env.xml中,找到export hbase_managers_zk
設定為false
HBase資料檢索流程與資料儲存
上圖中,我們可以看出不管客戶端讀或寫乙個表的資料,首先鏈結zookeeper,因為需要到zookeeper中找讀的資料,表是通過region來管理,每個region由regionserver管理,每個region都有startkey及endkey。hbase的 分為user tables 使用者表 ...
Data Retrieval 資料檢索
index 索引 定義 分類 1 結構化資料 固定格式 有限長度 應用 資料庫 元資料 2 非結構化資料 非定格式 非限長度 應用 磁碟檔案 查詢方式 1 結構化查詢 資料庫搜尋 2 非結構化查詢 a 順序掃瞄 b 全文檢索定義 根據使用者需求,從資料庫提取資料,生成資料表。資料表 可放回資料庫,也...
基本資料檢索
2016.11.28 二 基本資料檢索 select from table select 和 from 號是特殊符號,它表示所有的列,這句話的意思就是從 table 中查詢所有的列。在mysql和 oracle 中要求每句話的末尾要加乙個分號 但在 sqlserver 中不適用。2.1 查詢指定列 ...