客戶端client 通過zookeeper 獲知meta表所在的節點,又通過table和rowkey在meta表中找到 要進行操作的region的節點 進行傳送請求,請求先追加寫入wal日誌中,然後資料寫入到對應的memstore中 並在**進行排序
之後regionserver會返回ack進行核對。
meta表的位址 在 zookeeper的 根目錄下的 base 下的 meta-region-server中 人工檢視的話 是亂碼 然後是節點名稱和 hbase機器的埠 並會顯示是在master還是在regionserver上
client獲取位址後 就直接向這個節點傳送請求獲取meta表 節點返回meta表資料後
client會先進行快取 讓接下來使用快一點 同時通過 table和rowkey 在meta表中查詢 對應的rowkey應當在哪個regionserver中維護
meta表的結構儲存一般表的結構 依次記錄表名 + rowkey的起始位置 結束位置, region名稱 ,然後是列族info: 列名server value是節點+port位址
client獲取之後向 該節點才開始請求命令 命令會先記錄在wal日誌中 然後資料才會寫到 memstore中 此時 節點就會返回ack給 客戶端 客戶端就可以發下乙個命令了
同時節點不會立馬刷寫到hdfs上 它會有幾個引數的限制
hbase寫資料的能力是比它讀資料的能力是強的。 因為讀資料 不僅讀快取還要讀硬碟 並且要合起來 但是也沒有特別慢
刷寫的引數設定
ack這個 類似於kafka的ack 以及hadoop寫資料的ack 都是讀到記憶體就開始返回ack而不是落盤
列族類似於hive的分割槽概念
刷寫流程 對於
HBase之寫資料流程
1.客戶端訪問zookeeper獲取hbase meta表所在的regionserver資訊。2.與對應regionserver通訊,獲取meta表,根據寫請求引數查詢出應寫入到哪個regionserver中的哪個region中,把該錶的region資訊和meta表的位置資訊儲存在客戶端本地meta...
HBase讀寫資料流程
hbase的系統表 hbase namespace 儲存了hbase中的所有namespace的資訊 hbase meta 儲存了hbase中所有的region的資訊,包括rowkey範圍,region所在的regionserver的位址。hbase meta 在zookeeper中,進入zooke...
HBase讀寫資料流程
客戶端現在要插入一條資料,rowkey r000001,這條資料應該寫入到table表中的那個region中呢?1 客戶端要連線zookeeper,從zk的 hbase 節點找到 hbase meta 表所在的regionserver host port 2 regionserver 掃瞄 hbas...