1、存儲單元cell:rowkey+列簇+timestamp+版本,唯一確定一個單元格的值,
2、數據無類型,以字節碼形式存儲
比如輸入中文數據也是可以的
put 'tt','10003','info:age','今天'
3、Table 中的所有行都按照 RowKey 的字典序排列,可以在行的方向上分割為多個Region
比如插入數據
put 'tt','c','info:name','name'
put 'tt','a','info:bame','name'
put 'tt','3','info:came','name'
put 'tt','1','info:aame','name'
put 'tt','f','info:aame','name'
按照字典排序
比如插入數據
put 'tt','10002','info:name','name'
put 'tt','10002','info:bame','name'
put 'tt','10002','info:came','name'
put 'tt','10002','info:aame','name'
可以看到還是按照字典排序的
4、region(可以理解為是分區的概念):存儲rowkey,用來存儲數據
一臺regionserver上會有不同的region(由master節點進行分布,達到負載均衡)
region按大小分割的,每個表開始只有一個region,隨著數據增多,region不斷增大,當增大到一定閾值的時候,region就會等分為兩個新的region,之後會越來越多的region
region是 HBase 中分布式存儲和負載均衡的最小單元。hbase中數據的最小單元是cell
不同Region分布到不同RegionServer上
Region由一個或者多個store組成,每個store保存一個cf
每個store又由一個memstore和0個至多個storeFile組成
Memstore存儲在內存中,storefile存儲在HDFS上又叫hfile
還有一個hlog
可以看下HDFS
Namespace
表
Region名稱
Hbase上也可以看到
列鏃
可以看到數據
Hlog
(1)預寫日誌WAL:(所有客戶端操作的命令都會記錄到這個裡面)
(2)用戶每次寫入MemStore的同時,也會寫一份數據到HLOG文件中
(3)只有當寫入成功後才通知客戶端該操作成功
(4)每個RegionServer只有一個HLOG文件
(5)HLOG文件定期會滾動更新,並刪除舊的文件(已持久化到StoreFile中的數據)
(6)避免內存丟失數據,可以從日誌文件中恢復
5、HRegionServer
HRegionServer內部管理了一系列HRegion對象,每個HRegion對應了table中的一個region,HRegion中由多 個HStore組成。每個HStore對應了Table中的一個column family的存儲,可以看出每個columnfamily其實就是一個集中的存儲單元,因此最好將具備共同IO特性的column放
在一個column family中,這樣最高效。
HStore存儲是HBase存儲的核心,由兩部分組成,一部分是MemStore,一部分是StoreFile。
MemStore是 Sorted Memory Buffer,用戶寫入的數據首先會放入MemStore,當MemStore滿了以後會Flush成一個StoreFile(底層實現是HFile)。
6、hbase存儲內部機制
flush & compaction & split
(1)寫操作先寫入memstore,當memstore中的數據達到閥值,regionserver會啟動 flush cache 進程寫入storefile,每次寫入形成單獨的一個storefile
(2)當storefile文件的數量增長到一定值後,系統會進行合併(minor,major compaction),在合併過程中會進行版本和刪除工作,形成更大的storefile
(3)會把當前的region分割成倆個,並由HMaster分配到相應的regionserver伺服器