HBASE的读写以及client API
HBASE的读写以及client API
一:读写思想
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.添加配置文件
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 }


浙公网安备 33010602011771号