關鍵類:
HBaseAdmin 管理Hbase的,主要負責DDL操作
HTable 管理表中數據,主要負責DML操作
1、為了避免熱點,更多的建表方法
在Shell中:
create 'tb_splits',{NAME=>'cf',VERSION=>3},{SPLITS=>['a','b','c']} --直接創建多個region的table,每個region的startkey和endkey由參數依次指定,第一個region沒有開始startkey,最后一個沒有endkey --rowkey參數的選擇必須有意義,才能實現均勻分布,否則分多個region無意義 --多個region可以分布在多個regionserver上,添加數據的時候數據可以均勻分布在region中,實現負載均衡
在Java中
hBaseAdmin.createTable(tableDescriptor,Bytes.toBytes(0L),Bytes.toBytes(100L),10); hBaseAdmin.createTableAsync(tableDescriptor,keyValueArray);
2、原子操作
原子插入(compare-and-set)
hTable.checkAndPut(row,family,qualifier,value,put)
原子刪除(compare-and-delete)
hTable.checkAndDelete(row,family,qualifier,value,delete)
3、計數器:
用於實時收集信息,原子操作
在Shell下操作
incr 't1','20150226','daily:hits',1 -- t1 表名 --20150226 行健 -- daily是列族 --hits 是列,最后是值 get_counter 't1','row_key','daily:hits'
在java中操作
hTable.incrementColumnValue(...) hTable.increment(increment)
HBase的數據格式:
1、Region 存儲數據有三部分組成,包括HLog、MemStore、HStore
2、WAL(write-ahead-log),RegionServer共享一個HLog實例。
往region寫數據之前,先往HLog里面寫數據,同時往MemStore里面寫
HLog是為了保證事務,MemStore保證客戶端訪問速度
*當MemStore文件快滿的時候,會合並並寫StoreFile寫入HDFS;當StoreFile很多的時候,會合並合並為一個大文件
*HBase還有個存儲結構,LMS樹的文件會不斷合並;和一般的索引文件不同,索引一般用B+樹結構:寬度非常寬,深度很淺
HFile 是存儲數據最根本的,storefile是對hfile的簡單封裝