它是稀疏、分布式、持久化的、多維有序映射;
shell命令行交互:HBase Shell:hbase shell
常用shell命令:list(列出HBase所有表);describe tbName(顯示HBase表詳細信息);create 'tbName','column family'(建表);put ‘tbName’,‘rowID’,‘column family:column quarlifier’,‘value’(新增);get 'tbName',"rowID"(讀數據);scan 'tbName'(讀數據);
關系數據庫是二維數據庫,HBase數據庫是四維數據庫,坐標(rowKey, column family, column qualifier, version);
HBase寫機制:1.預寫日志HLog;2.MemStroe;
HLog:write-ahead log,簡稱WAL,是HBase底層文件系統上的一個文件;HBase集群每臺服務器維護一個WAL,HBase寫數據之前,先寫入WAL,直到WAL新紀錄成功寫入MemStore,寫動作才算作完成;如果HBase服務器宕機,WAL具有自動回訪機制,不需要手動回復;
MemStore:內存寫入緩沖區,在HBase把數據持久化到硬盤之前,HBase都把數據寫在MemStore,直到MemStore寫滿為止(MemStore大小由HBase配置文件控制),MemStore滿了,HBase把數據持久化到硬盤,生成一個HFile文件;集群的每個節點上一個列族對應一個MemStore;
HFile:HBase底層存儲格式,HFile對應于列族,一個列族可對應多個HFile,一個HFIle不能存多個列族;
HBase讀數據:通過Get對象對標進行讀取;1.檢查MemStore待修改隊列;2.檢查BlockCache包含該行的Block最近是否被訪問過;3.訪問硬盤個上的HFile;
HBase讀機制:HBase實現了快速讀取數據,采用BlockCache(使用LRU算法:最近最少使用算法)緩存技術,
BlockCache:與MemStore在同一個JVM堆里,用來保存從HFile里讀入內容的頻繁訪問的數據,避免硬盤讀取;每個列族都有一個自己的BlockCache;
Block:BlockCache中的Block,是HBase從硬盤里完成一次讀取的數據單位;是建立索引的最小數據單位;也是從硬盤讀取的最小數據單位;
HFile存放形式:Block的序列外加這些Block的索引;HBase要讀出一個Block需要先通過索引查找該Block,然后從硬盤讀出;
隨機訪問Block設置小點(索引變大);順序掃描:Block設置大點(索引項變小,索引變小);
刪除數據:實質上是打上刪除標記,查詢時不會返回含有刪除標記的單元格;
HBase合并:小合并(把多個小HFile合并為一個大HFile)、大合并(給定region的一個列族的所有HFile進行合并為一個HFile);
HBase含有時間版本概念;
HBase數據模型:表、行鍵、列族、列限定符、單元、時間版本;