一:讀寫思想
1.系統表
hbase:namespace
存儲hbase中所有的namespace的信息
hbase:meta
rowkey:hbase中所有表的region的名稱
column:regioninfo:region的名稱,region的范圍
server:該region在哪台regionserver上
2.讀寫流程
tbname,rowkey -> region -> regionserver -> store -> storefile
但是這些都是加載過meta表之后,然后meta表如何尋找?
3.讀的流程
-》根據表名和rowkey找到對應的region
-》zookeeper中存儲了meta表的region信息
-》從meta表中獲取相應的region的信息
-》找到對應的regionserver
-》查找對應的region
-》讀memstore
-》storefile
4.寫的流程
-》根據表名和rowkey找到對應的region
-》zookeeper中存儲了meta表的region信息
-》從meta表中獲取相應的region的信息
-》找到對應的regionserver
-》正常情況
-》WAL(write ahead log預寫日志),一個regionserver維護一個hlog
-》memstore (達到一定大小,flush到磁盤)
-》當多個storefile達到一定大小以后,會進行compact,合並成一個storefile
-》當單個storefile達到一定大小以后,會進行split操作,等分割region
5.注意點
關於版本的合並和刪除是在compact階段完成的。hbase只負責數據的增加存儲
hmaster短暫的不參與實際的讀寫
二:HBase Client API 的書寫
1.添加依賴
2.添加配置文件
core-site.xml
hdfs-site.xml
hbase-site.xml
log4j.properties
regionservers
3.get的書寫
4.put的書寫
5.delete的書寫
注意全部刪除:
6.scan的書寫
7.過濾條件的scan的書寫
三:復制源代碼
1 package com.beifeng.bigdat; 2 3 import java.io.IOException; 4 5 import org.apache.hadoop.conf.Configuration; 6 import org.apache.hadoop.hbase.Cell; 7 import org.apache.hadoop.hbase.CellUtil; 8 import org.apache.hadoop.hbase.HBaseConfiguration; 9 import org.apache.hadoop.hbase.client.Delete; 10 import org.apache.hadoop.hbase.client.Get; 11 import org.apache.hadoop.hbase.client.HTable; 12 import org.apache.hadoop.hbase.client.Put; 13 import org.apache.hadoop.hbase.client.Result; 14 import org.apache.hadoop.hbase.client.ResultScanner; 15 import org.apache.hadoop.hbase.client.Scan; 16 import org.apache.hadoop.hbase.filter.Filter; 17 import org.apache.hadoop.hbase.filter.PrefixFilter; 18 import org.apache.hadoop.hbase.util.Bytes; 19 20 public class HbaseClientTest { 21 public static HTable getTable(String name) throws Exception{ 22 Configuration conf=HBaseConfiguration.create(); 23 HTable table=new HTable(conf,name); 24 return table; 25 26 } 27 public static void getData(HTable table) throws Exception{ 28 Get get=new Get(Bytes.toBytes("103")); 29 get.addFamily(Bytes.toBytes("info")); 30 Result rs=table.get(get); 31 for(Cell cell:rs.rawCells()){ 32 System.out.println( 33 Bytes.toString(CellUtil.cloneFamily(cell))+"--"+ 34 Bytes.toString(CellUtil.cloneQualifier(cell))+"---"+ 35 Bytes.toString(CellUtil.cloneValue(cell))+"----"+ 36 cell.getTimestamp() 37 ); 38 System.out.println("----------------------------------------------"); 39 } 40 } 41 42 public static void putData(HTable table) throws Exception{ 43 Put put=new Put(Bytes.toBytes("103")); 44 put.add(Bytes.toBytes("info"), 45 Bytes.toBytes("name"), 46 Bytes.toBytes("zhaoliu")); 47 table.put(put); 48 getData(table); 49 } 50 51 public static void deleteData(HTable table) throws Exception{ 52 Delete delete =new Delete(Bytes.toBytes("103")); 53 delete.deleteColumns(Bytes.toBytes("info"), Bytes.toBytes("name")); 54 table.delete(delete); 55 getData(table); 56 } 57 58 public static void scanData(HTable table) throws Exception{ 59 Scan scan =new Scan(); 60 ResultScanner rs=table.getScanner(scan); 61 for(Result r:rs){ 62 System.out.println(Bytes.toString(r.getRow())); 63 for(Cell cell:r.rawCells()){ 64 System.out.println( 65 Bytes.toString(CellUtil.cloneFamily(cell))+"---"+ 66 Bytes.toString(CellUtil.cloneQualifier(cell))+"---"+ 67 Bytes.toString(CellUtil.cloneValue(cell))+"--"+ 68 cell.getTimestamp() 69 ); 70 System.out.println(); 71 } 72 } 73 } 74 75 public static void filterScan(HTable table) throws Exception{ 76 Scan scan =new Scan(); 77 Filter filter=new PrefixFilter(Bytes.toBytes("10")); 78 scan.setFilter(filter); 79 scan.setCacheBlocks(true); 80 scan.setCaching(1000); 81 scan.setBatch(100); 82 ResultScanner rs=table.getScanner(scan); 83 for(Result r:rs){ 84 System.out.println(Bytes.toString(r.getRow())); 85 for(Cell cell:r.rawCells()){ 86 System.out.println( 87 Bytes.toString(CellUtil.cloneFamily(cell))+"---"+ 88 Bytes.toString(CellUtil.cloneQualifier(cell))+"---"+ 89 Bytes.toString(CellUtil.cloneValue(cell))+"--"+ 90 cell.getTimestamp() 91 ); 92 System.out.println(); 93 } 94 } 95 96 } 97 98 public static void main(String[] args) throws Exception { 99 HTable table=getTable("nstest1:tb1"); 100 //getData(table); 101 //putData(table); 102 //deleteData(table); 103 //scanData(table); 104 filterScan(table); 105 } 106 107 108 109 }