HBase主要API总结及代码示例

一、

几个主要 Hbase API 类和数据模型之间的对应关系:

1、 HBaseAdmin
关系: org.apache.hadoop.hbase.client.HBaseAdmin
作用:提供了一个接口来管理 HBase 数据库的表信息。它提供的方法包括:创建表,删 除表,列出表项,使表有效或无效,以及添加或删除表列族成员等。

2、 HBaseConfiguration
关系: org.apache.hadoop.hbase.HBaseConfiguration
作用:对 HBase 进行配置

3、 HTableDescriptor
关系: org.apache.hadoop.hbase.HTableDescriptor
作用:包含了表的名字极其对应表的列族

4、 HColumnDescriptor
关系: org.apache.hadoop.hbase.HColumnDescriptor
作用:维护着关于列族的信息,例如版本号,压缩设置等。它通常在创建表或者为表添 加列族的时候使用。列族被创建后不能直接修改,只能通过删除然后重新创建的方式。
列族被删除的时候,列族里面的数据也会同时被删除。

5、 HTable
关系: org.apache.hadoop.hbase.client.HTable
作用:可以用来和 HBase 表直接通信。此方法对于更新操作来说是非线程安全的。

6、 Put
关系: org.apache.hadoop.hbase.client.Put
作用:用来对单个行执行添加操作

7、 Get
关系: org.apache.hadoop.hbase.client.Get
作用:用来获取单个行的相关信息

8、 Result
关系: org.apache.hadoop.hbase.client.Result
作用:存储 Get 或者 Scan 操作后获取表的单行值。使用此类提供的方法可以直接获取值 或者各种 Map 结构( key-value 对)

 二、具体增删改查    代码具体实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
package  HbaseDome;
 
 
 
import  java.util.List;
 
import  org.apache.hadoop.conf.Configuration;
import  org.apache.hadoop.hbase.Cell;
import  org.apache.hadoop.hbase.HBaseConfiguration;
import  org.apache.hadoop.hbase.HColumnDescriptor;
import  org.apache.hadoop.hbase.HTableDescriptor;
import  org.apache.hadoop.hbase.KeyValue;
import  org.apache.hadoop.hbase.TableName;
import  org.apache.hadoop.hbase.client.Delete;
import  org.apache.hadoop.hbase.client.Get;
import  org.apache.hadoop.hbase.client.HBaseAdmin;
import  org.apache.hadoop.hbase.client.HTable;
import  org.apache.hadoop.hbase.client.Put;
import  org.apache.hadoop.hbase.client.Result;
import  org.apache.hadoop.hbase.client.ResultScanner;
import  org.apache.hadoop.hbase.client.Scan;
import  org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.Table;
import  org.apache.hadoop.hbase.util.Bytes;
 
 
 
public  class  Hbasedome  implements  HBaseDemoInterface{
 
     
     static  Configuration conf = null ;
     private  static  final  String ZKconnect= "192.168.123.212:2181,192.168.123.213:2181,192.168.123.214:2181" ;
     static {
         conf=HBaseConfiguration.create();
         conf.set( "hbase.zookeeper.quorum" , ZKconnect);
     }
//  static String tableName="student";
//  static String[] family={"lie01","lie02"};
     
     
     public  static  void  main(String[] args) {
         Hbasedome a = new  Hbasedome();
          String tableName= "student11" ;
          String[] family={ "lie01" , "lie02" };
         try  {
             HTableDescriptor htds = new  HTableDescriptor(tableName);
             for ( int  z= 0 ;z<family.length;z++){
                 HColumnDescriptor h= new  HColumnDescriptor(family[z]);
                 htds.addFamily(h);
             }
//          a.descTable("table03");
//          a.createTable(tableName, htds);
//          a.descTable("table03");
//          a.getAllTables();
//          a.createTable(tableName,family);
//          a.getResult("table03", "usr001");
//          a.dropTable("user1");
//          a.getAllTables();
//          a.putData("table03", "usr005", "liezu01", "name", "liu");
//          a.getResult("table03", "usr001");
//          a.getResultScann("table03");
//          a.getResultScann("table03","");
             
             Result result = a.getResult( "table03" "usr001" );
             System.out.println(result.toString());
             List<Cell> cells = result.listCells();
             for  ( int  i =  0 ; i < cells.size(); i++) {
                 Cell cell = cells.get(i);
                 System.out.println(cell.toString());
     //          printCell(cell);
             }
         
//          List<KeyValue> list = result.list();
//          for (int i = 0; i < list.size(); i++) {
//              KeyValue kv = list.get(i);
//              printKeyValye(kv);
//          }
         catch  (Exception e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
 
         
     }
     public  static  void  printKeyValye(KeyValue kv) {
         System.out.println(Bytes.toString(kv.getRow()) +  "\t"  + Bytes.toString(kv.getFamily()) +  "\t"  + Bytes.toString(kv.getQualifier()) +  "\t"  + Bytes.toString(kv.getValue()) +  "\t"  + kv.getTimestamp());
     }
     public  static  void  printCell(Cell cell) {
         System.out.println(Bytes.toString(cell.getRow()) +  "\t"  + Bytes.toString(cell.getFamily()) +  "\t"  + Bytes.toString(cell.getQualifier()) +  "\t"  + Bytes.toString(cell.getValue()) +  "\t"  + cell.getTimestamp());
     }
     //创建表
     @Override
     public  void  createTable(String tableName, String[] family)  throws  Exception {
         HBaseAdmin admin= new  HBaseAdmin(conf);
         HTableDescriptor desc = new  HTableDescriptor(tableName);
         
         for ( int  i= 0 ;i<family.length;i++){
             desc.addFamily( new  HColumnDescriptor(family[i]));
             System.out.println( "11111111111" +family[i]);
         }
         if (admin.tableExists(tableName)){
             System.out.println( "表已经存在,别瞎输行吗" );
//          System.exit(0);
         } else {
             admin.createTable(desc);
             System.out.println( "表创建成功" );
         }
     }
 
     //创建表
     @Override
     public  void  createTable(String tableName, HTableDescriptor htds)  throws  Exception {
         HBaseAdmin admin= new  HBaseAdmin(conf);
         boolean  tableExists1 = admin.tableExists(Bytes.toBytes(tableName));
         System.out.println(tableExists1 ?  "表已存在"  "表不存在" );
         admin.createTable(htds);
         boolean  tableExists = admin.tableExists(Bytes.toBytes(tableName));
         System.out.println(tableExists ?  "创建表成功"  "创建失败" );
     }
 
     
     @Override
     public  void  descTable(String tableName)  throws  Exception {
         HBaseAdmin admin= new  HBaseAdmin(conf);
         HTable table= new  HTable(conf, tableName);
         HTableDescriptor desc =table.getTableDescriptor();
         HColumnDescriptor[] columnFamilies = desc.getColumnFamilies();
     
         for (HColumnDescriptor t:columnFamilies){
             System.out.println(Bytes.toString(t.getName()));
         }
         
     }
 
     这种方式是替换该表tableName的所有列簇
     @Override
     public  void  modifyTable(String tableName)  throws  Exception {
         HBaseAdmin admin= new  HBaseAdmin(conf);
         HTableDescriptor htd =  new  HTableDescriptor(TableName.valueOf(tableName));
         htd.addFamily( new  HColumnDescriptor(Bytes.toBytes( "cf3" )));
         htd.addFamily( new  HColumnDescriptor(Bytes.toBytes( "cf2" )));
         admin.modifyTable(tableName, htd);
 
         // 删除该表tableName当中的特定的列簇
         // admin.deleteColumn(tableName, "cf3");
 
         System.out.println( "修改成功" );
         
     }
 
     @Override
     public  void  getAllTables()  throws  Exception {
         HBaseAdmin admin = new  HBaseAdmin(conf);
         
         String[] tableNames = admin.getTableNames();
         for ( int  i= 0 ;i<tableNames.length;i++){
             System.out.println(tableNames[i]);
         }
     }
 
     //更新数据  插入数据
     @Override
     public  void  putData(String tableName, String rowKey, String familyName, String columnName, String value)
             throws  Exception {
         HTable htable= new  HTable(conf, Bytes.toBytes(tableName));
         Put put= new  Put(Bytes.toBytes(rowKey));
         put.add(Bytes.toBytes(familyName), Bytes.toBytes(columnName), Bytes.toBytes(value));
         htable.put(put);
         
     }
 
     //为表添加数据
     @Override
     public  void  addData(String tableName, String rowKey, String[] column1, String[] value1, String[] column2,
             String[] value2)  throws  Exception {
         
         Put put= new  Put(Bytes.toBytes(rowKey));
         HTable htable= new  HTable(conf, Bytes.toBytes(tableName));
         HColumnDescriptor[] columnFamilies = htable.getTableDescriptor().getColumnFamilies();
         for ( int  i= 0 ;i<=columnFamilies.length;i++){
             String nameAsString = columnFamilies[i].getNameAsString();
             if (nameAsString.equals( "lie01" )){
                 for ( int  j= 0 ;j<column1.length;j++){
                     put.add(Bytes.toBytes(nameAsString), Bytes.toBytes(column1[j]),Bytes.toBytes(value1[j]));
                 }
             }
             if (nameAsString.equals( "lie02" )){
                 for ( int  j= 0 ;j<column2.length;j++){
                     put.add(Bytes.toBytes(nameAsString), Bytes.toBytes(column2[j]),Bytes.toBytes(value2[j]));
                 }
             }
             
         }
         htable.put(put);
         System.out.println( "addData ok!" );
     }
 
     //根据rowkey 查询
     @Override
     public  Result getResult(String tableName, String rowKey)  throws  Exception {
         Get get= new  Get(Bytes.toBytes(rowKey));
         HTable htable= new  HTable(conf, Bytes.toBytes(tableName));
         Result result=htable.get(get);
//      for(KeyValue k:result.list()){
//          System.out.println(Bytes.toString(k.getFamily()));
//          System.out.println(Bytes.toString(k.getQualifier()));
//          System.out.println(Bytes.toString(k.getValue()));
//          System.out.println(k.getTimestamp());
//      }
         return  result;
     }
 
     //查询指定的某列
     @Override
     public  Result getResult(String tableName, String rowKey, String familyName, String columnName)  throws  Exception {
         Get get= new  Get(Bytes.toBytes(rowKey));
         HTable htable= new  HTable(conf, Bytes.toBytes(tableName));
         get.addColumn(Bytes.toBytes(familyName),Bytes.toBytes(columnName));
         Result result=htable.get(get);
         for (KeyValue k:result.list()){
             System.out.println(Bytes.toString(k.getFamily()));
             System.out.println(Bytes.toString(k.getQualifier()));
             System.out.println(Bytes.toString(k.getValue()));
             System.out.println(k.getTimestamp());
         }
         return  result;
     }
 
     
     //遍历查询表
     @Override
     public  ResultScanner getResultScann(String tableName)  throws  Exception {
     
         Scan scan= new  Scan();
         ResultScanner rs = null ;
         HTable htable= new  HTable(conf, tableName);
         try {
             rs=htable.getScanner(scan);
             for (Result r: rs){
                 for (KeyValue kv:r.list()){
     
                     System.out.println(Bytes.toString(kv.getRow()));
                     System.out.println(Bytes.toString(kv.getFamily()));
                     System.out.println(Bytes.toString(kv.getQualifier()));
                     System.out.println(Bytes.toString(kv.getValue()));
                     System.out.println(kv.getTimestamp());
                 }
             }
         } finally {
             rs.close();
         }
         return  rs;
     }
 
     @Override
     public  ResultScanner getResultScann(String tableName, Scan scan)  throws  Exception {
         
         ResultScanner rs = null ;
         HTable htable= new  HTable(conf, tableName);
         try {
             rs=htable.getScanner(scan);
             for (Result r: rs){
                 for (KeyValue kv:r.list()){
     
                     System.out.println(Bytes.toString(kv.getRow()));
                     System.out.println(Bytes.toString(kv.getFamily()));
                     System.out.println(Bytes.toString(kv.getQualifier()));
                     System.out.println(Bytes.toString(kv.getValue()));
                     System.out.println(kv.getTimestamp());
                 }
             }
         } finally {
             rs.close();
         }      
         return  rs;
     }
 
     //查询表中的某一列
     @Override
     public  Result getResultByColumn(String tableName, String rowKey, String familyName, String columnName)
             throws  Exception {
         
         
         HTable htable= new  HTable(conf, tableName);
         Get get= new  Get(Bytes.toBytes(rowKey));
         get.addColumn(Bytes.toBytes(familyName),Bytes.toBytes(columnName));
         Result result=htable.get(get);
         for (KeyValue kv: result.list()){
 
             System.out.println(Bytes.toString(kv.getFamily()));
             System.out.println(Bytes.toString(kv.getQualifier()));
             System.out.println(Bytes.toString(kv.getValue()));
             System.out.println(kv.getTimestamp());
             
         }
         return  result;
     }
 
     
     //查询某列数据的某个版本
     @Override
     public  Result getResultByVersion(String tableName, String rowKey, String familyName, String columnName,
             int  versions)  throws  Exception {
     
         HTable htable= new  HTable(conf, tableName);
         Get get = new  Get(Bytes.toBytes(rowKey));
         get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName));
         get.setMaxVersions(versions);
         Result result=htable.get(get);
         
         for (KeyValue kv: result.list()){
 
             System.out.println(Bytes.toString(kv.getFamily()));
             System.out.println(Bytes.toString(kv.getQualifier()));
             System.out.println(Bytes.toString(kv.getValue()));
             System.out.println(kv.getTimestamp());
             
         }
 
         return  result;
     }
 
     //删除指定某列
     @Override
     public  void  deleteColumn(String tableName, String rowKey, String falilyName, String columnName)  throws  Exception {
 
         HTable htable= new  HTable(conf, tableName);
//      Delete delete1=new Delete(Bytes.toBytes(rowKey));
         Delete de = new  Delete(Bytes.toBytes(rowKey));
         de.deleteColumn(Bytes.toBytes(falilyName), Bytes.toBytes(columnName));
         htable.delete(de);
     }
 
     
     //删除指定的某个rowkey
     @Override
     public  void  deleteColumn(String tableName, String rowKey)  throws  Exception {
         HTable htable= new  HTable(conf, tableName);
 
         Delete de = new  Delete(Bytes.toBytes(rowKey));
          htable.delete(de);
         
     }
 
     //让该表失效
     @Override
     public  void  disableTable(String tableName)  throws  Exception {
         HBaseAdmin admin= new  HBaseAdmin(conf);
         admin.disableTable(tableName);
         
     }
 
     //删除表
     @Override
     public  void  dropTable(String tableName)  throws  Exception {
         
         HBaseAdmin admin= new  HBaseAdmin(conf);
         admin.disableTable(tableName);
         admin.deleteTable(tableName);
         
     }
 
}

  

  

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
package  com.ghgj.hbase.test1610;
 
import  java.io.IOException;
import  java.util.ArrayList;
import  java.util.Iterator;
import  java.util.List;
 
import  org.apache.hadoop.conf.Configuration;
import  org.apache.hadoop.hbase.Cell;
import  org.apache.hadoop.hbase.HBaseConfiguration;
import  org.apache.hadoop.hbase.HColumnDescriptor;
import  org.apache.hadoop.hbase.HTableDescriptor;
import  org.apache.hadoop.hbase.KeyValue;
import  org.apache.hadoop.hbase.TableName;
import  org.apache.hadoop.hbase.client.Get;
import  org.apache.hadoop.hbase.client.HBaseAdmin;
import  org.apache.hadoop.hbase.client.HTable;
import  org.apache.hadoop.hbase.client.Put;
import  org.apache.hadoop.hbase.client.Result;
import  org.apache.hadoop.hbase.client.ResultScanner;
import  org.apache.hadoop.hbase.client.Scan;
import  org.apache.hadoop.hbase.util.Bytes;
 
public  class  HBaseAPIDemo1610  implements  HBaseDemoInterface {
 
     private  static  final  String ROWKEY =  "p001" ;
     private  static  final  String ROWKEY2 =  "p002" ;
     private  static  final  String FAMILY1 =  "cf1" ;
     private  static  final  String FAMILY2 =  "cf2" ;
     private  static  final  String KEY =  "name" ;
     private  static  final  String VALUE =  "huangbo" ;
 
     private  static  final  String TABLE_NAME =  "person" ;
     private  static  final  String[] COLUMN_FAMILY =  new  String[] { FAMILY1, FAMILY2 };
 
     static  Configuration conf =  null ;
     static  HBaseAdmin admin =  null ;
     static  HTable table =  null ;
 
     static  {
         try  {
             conf = HBaseConfiguration.create();
             conf.set( "hbase.zookeeper.quorum" "hadoop03:2181,hadoop04:2181,hadoop05:2181" );
             admin =  new  HBaseAdmin(conf);
             table =  new  HTable(conf, TABLE_NAME);
 
         catch  (IOException e) {
             // e.printStackTrace();
             System.out.println( "报错" );
         }
     }
 
     public  static  void  main(String[] args)  throws  Exception {
         HBaseAPIDemo1610 hbase =  new  HBaseAPIDemo1610();
 
         // 测试创建表
         hbase.createTable(TABLE_NAME, COLUMN_FAMILY);
 
         // 测试创建表
         HTableDescriptor htd =  new  HTableDescriptor(TableName.valueOf(TABLE_NAME));
         for  ( int  i =  0 ; i < COLUMN_FAMILY.length; i++) {
             HColumnDescriptor cf1 =  new  HColumnDescriptor(COLUMN_FAMILY[i]);
             htd.addFamily(cf1);
         }
         hbase.createTable(TABLE_NAME, htd);
 
         // 查看表属性
         hbase.descTable(TABLE_NAME);
 
         // 查询所有的表
         hbase.getAllTables();
 
         // 测试修改表
         hbase.modifyTable(TABLE_NAME);
 
         // 插入数据
         hbase.putData(TABLE_NAME, ROWKEY, FAMILY1, KEY, VALUE);
 
         // 测试插入一堆数据
         String[] column1 =  new  String[] {  "name1" "age" "province"  };
         String[] value1 =  new  String[] {  "huangbo" "33" "xinjiang"  };
         String[] column2 =  new  String[] {  "gender"  };
         String[] value2 =  new  String[] {  "male"  };
         hbase.addData(TABLE_NAME, ROWKEY2, column1, value1, column2, value2);
 
         // 通过rowkey查询数据
         Result result = hbase.getResult(TABLE_NAME, ROWKEY2);
         System.out.println(result.toString());
         List<KeyValue> list = result.list();
         for  ( int  i =  0 ; i < list.size(); i++) {
             KeyValue kv = list.get(i);
             printKeyValye(kv);
         }
 
         // 通过rowkey, family, province查询数据
         Result result1 = hbase.getResult(TABLE_NAME, ROWKEY2, FAMILY1,  "province" );
         List<Cell> cells = result1.listCells();
         for  ( int  i =  0 ; i < cells.size(); i++) {
             Cell cell = cells.get(i);
             printCell(cell);
         }
 
         // 扫描全表数据
         ResultScanner resultScann = hbase.getResultScann(TABLE_NAME);
         printResultScanner(resultScann);
         
         /*Iterator<Result> iterator = resultScann.iterator();
         while(iterator.hasNext()){
             Result next = iterator.next();
         }*/
 
         // 通过scan扫描全表数据,scan中可以加入一些过滤条件
         Scan scan =  new  Scan();
         scan.setStartRow(Bytes.toBytes( "user" ));
         scan.setStopRow(Bytes.toBytes( "zk002" ));
         scan.setTimeRange(1488252774189l, 1488252774191l);
         ResultScanner resultScann1 = hbase.getResultScann(TABLE_NAME, scan);
         printResultScanner(resultScann1);
 
         // 两种方式查询最大版本数的hbase数据
         Result resultByVersion = hbase.getResultByVersion(TABLE_NAME, ROWKEY, FAMILY1,  "name" 3 );
         printResult(resultByVersion);
         System.out.println( "-------------------" );
         ResultScanner rs = hbase.getResultByVersion(ROWKEY, FAMILY1,  "name" 3 );
         printResultScanner(rs);
 
         // 删除表
         hbase.dropTable(TABLE_NAME);
     }
 
     public  static  void  printResultScanner(ResultScanner resultScann) {
         for  (Result result : resultScann) {
             printResult(result);
         }
     }
 
     public  static  void  printResult(Result result) {
         List<Cell> cells = result.listCells();
         for  ( int  i =  0 ; i < cells.size(); i++) {
             Cell cell = cells.get(i);
             printCell(cell);
         }
     }
 
     public  static  void  printCell(Cell cell) {
         System.out.println(Bytes.toString(cell.getRow()) +  "\t"  + Bytes.toString(cell.getFamily()) +  "\t"  + Bytes.toString(cell.getQualifier()) +  "\t"  + Bytes.toString(cell.getValue()) +  "\t"  + cell.getTimestamp());
     }
 
     public  static  void  printKeyValye(KeyValue kv) {
         System.out.println(Bytes.toString(kv.getRow()) +  "\t"  + Bytes.toString(kv.getFamily()) +  "\t"  + Bytes.toString(kv.getQualifier()) +  "\t"  + Bytes.toString(kv.getValue()) +  "\t"  + kv.getTimestamp());
     }
 
     // create 'tablename','cf1','cf2'
     @Override
     public  void  createTable(String tableName, String[] family)  throws  Exception {
         HTableDescriptor htd =  new  HTableDescriptor(TableName.valueOf(tableName));
         for  ( int  i =  0 ; i < family.length; i++) {
             HColumnDescriptor cf1 =  new  HColumnDescriptor(family[i]);
             htd.addFamily(cf1);
         }
         admin.createTable(htd);
         boolean  tableExists = admin.tableExists(Bytes.toBytes(tableName));
         System.out.println(tableExists ?  "创建表成功"  "创建失败" );
     }
 
     @Override
     public  void  createTable(String tableName, HTableDescriptor htd)  throws  Exception {
         admin.createTable(htd);
         boolean  tableExists = admin.tableExists(Bytes.toBytes(tableName));
         System.out.println(tableExists ?  "创建表成功"  "创建失败" );
     }
 
     // desc 'person'
     @Override
     public  void  descTable(String tableName)  throws  Exception {
         HTableDescriptor tableDescriptor = table.getTableDescriptor();
         HColumnDescriptor[] columnFamilies = tableDescriptor.getColumnFamilies();
         for  (HColumnDescriptor hcd : columnFamilies) {
             // System.out.println(hcd.toString()+"\t");
             System.out.println(Bytes.toString(hcd.getName()));
         }
     }
 
     @Override
     public  void  modifyTable(String tableName)  throws  Exception {
         // 这种方式是替换该表tableName的所有列簇
         HTableDescriptor htd =  new  HTableDescriptor(TableName.valueOf(tableName));
         htd.addFamily( new  HColumnDescriptor(Bytes.toBytes( "cf3" )));
         htd.addFamily( new  HColumnDescriptor(Bytes.toBytes( "cf2" )));
         admin.modifyTable(tableName, htd);
 
         // 删除该表tableName当中的特定的列簇
         // admin.deleteColumn(tableName, "cf3");
 
         System.out.println( "修改成功" );
     }
 
     // list
     @Override
     public  void  getAllTables()  throws  Exception {
         TableName[] listTableNames = admin.listTableNames();
         for  (TableName tn : listTableNames) {
             System.out.println(tn.toString());
         }
     }
 
     // put 'tablename','rowkey','familyname:key','value'
     @Override
     public  void  putData(String tableName, String rowKey, String familyName, String columnName, String value)  throws  Exception {
         // HTable table = new HTable(conf, tableName);
         Put put =  new  Put(Bytes.toBytes(rowKey));
         put.add(Bytes.toBytes(familyName), Bytes.toBytes(columnName), Bytes.toBytes(value));
         table.put(put);
         System.out.println( "插入成功" );
     }
 
     /**
      * @param tableName
      *            表名
      * @param rowKey
      *            rowkey
      * @param column1
      *            第一个列簇的key数组
      * @param value1
      *            第一个列簇的value数组,key数组和value数组长度必须一样
      * @param column2
      *            第二列簇的key数组
      * @param value2
      *            第二个列簇的values数组, 同上同理
      * @throws Exception
      */
     @Override
     public  void  addData(String tableName, String rowKey, String[] column1, String[] value1, String[] column2, String[] value2)  throws  Exception {
         List<Put> puts =  new  ArrayList<Put>();
 
         for  ( int  i =  0 ; i < column1.length; i++) {
             Put put =  new  Put(Bytes.toBytes(rowKey));
             put.add(Bytes.toBytes(FAMILY1), Bytes.toBytes(column1[i]), Bytes.toBytes(value1[i]));
             puts.add(put);
         }
 
         for  ( int  i =  0 ; i < column2.length; i++) {
             Put put =  new  Put(Bytes.toBytes(rowKey));
             put.add(Bytes.toBytes(FAMILY2), Bytes.toBytes(column2[i]), Bytes.toBytes(value2[i]));
             puts.add(put);
         }
 
         table.put(puts);
         System.out.println( "插入一堆数据成功" );
     }
 
     // get 'tablename','rowkey'
     @Override
     public  Result getResult(String tableName, String rowKey)  throws  Exception {
         Get get =  new  Get(Bytes.toBytes(rowKey));
         Result result = table.get(get);
         return  result;
     }
 
     @Override
     public  Result getResult(String tableName, String rowKey, String familyName, String columnName)  throws  Exception {
         Get get =  new  Get(Bytes.toBytes(rowKey));
         get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName));
         Result result = table.get(get);
         return  result;
     }
 
     @Override
     public  ResultScanner getResultScann(String tableName)  throws  Exception {
         Scan scan =  new  Scan();
         ResultScanner scanner = table.getScanner(scan);
         // ResultScanner scanner = table.getScanner(Bytes.toBytes(FAMILY2));
         // ResultScanner scanner = table.getScanner(Bytes.toBytes(FAMILY1),
         // Bytes.toBytes("name1"));
         return  scanner;
     }
 
     @Override
     public  ResultScanner getResultScann(String tableName, Scan scan)  throws  Exception {
         return  table.getScanner(scan);
     }
 
     @Override
     public  Result getResultByColumn(String tableName, String rowKey, String familyName, String columnName)  throws  Exception {
         return  null ;
     }
 
     // get 'person','p001',{COLUMNS => 'cf1:name', VERSIONS => 3}
     @Override
     public  Result getResultByVersion(String tableName, String rowKey, String familyName, String columnName,  int  versions)  throws  Exception {
         Get get =  new  Get(Bytes.toBytes(rowKey));
         get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName));
         get.setMaxVersions(versions);
         Result result = table.get(get);
         return  result;
     }
 
     public  ResultScanner getResultByVersion(String rowKey, String familyName, String columnName,  int  versions)  throws  Exception {
         Scan scan =  new  Scan(Bytes.toBytes(rowKey), Bytes.toBytes(rowKey));
         scan.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName));
         scan.setMaxVersions(versions);
         ResultScanner scanner = table.getScanner(scan);
         return  scanner;
     }
 
     @Override
     public  void  deleteColumn(String tableName, String rowKey, String falilyName, String columnName)  throws  Exception {
 
     }
 
     @Override
     public  void  deleteColumn(String tableName, String rowKey)  throws  Exception {
 
     }
 
     @Override
     public  void  disableTable(String tableName)  throws  Exception {
         admin.disableTable(tableName);
     }
 
     @Override
     public  void  dropTable(String tableName)  throws  Exception {
         try  {
             admin.deleteTable(tableName);
         catch  (Exception e) {
             // e.printStackTrace();
             disableTable(tableName);
             admin.deleteTable(tableName);
             System.out.println( "ssssssss" );
         finally  {
             boolean  tableExists = admin.tableExists(Bytes.toBytes(tableName));
             System.out.println(tableExists ?  "删除失败"  "删除成功" );
         }
     }
}

  

 

  • 3
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,作为AI语言模型,我无法提供编程代码,但是我可以给您一些HBASE API示例,您可以根据这些示例来编写自己的代码示例1:创建HBase表 ``` Configuration config = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(config); HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("myTable")); tableDescriptor.addFamily(new HColumnDescriptor("myFamily1")); tableDescriptor.addFamily(new HColumnDescriptor("myFamily2")); admin.createTable(tableDescriptor); ``` 示例2:插入数据 ``` Configuration config = HBaseConfiguration.create(); HTable table = new HTable(config, "myTable"); Put put = new Put(Bytes.toBytes("myRow")); put.add(Bytes.toBytes("myFamily1"), Bytes.toBytes("myQualifier1"), Bytes.toBytes("myValue1")); put.add(Bytes.toBytes("myFamily2"), Bytes.toBytes("myQualifier2"), Bytes.toBytes("myValue2")); table.put(put); ``` 示例3:获取数据 ``` Configuration config = HBaseConfiguration.create(); HTable table = new HTable(config, "myTable"); Get get = new Get(Bytes.toBytes("myRow")); Result result = table.get(get); byte[] value1 = result.getValue(Bytes.toBytes("myFamily1"), Bytes.toBytes("myQualifier1")); byte[] value2 = result.getValue(Bytes.toBytes("myFamily2"), Bytes.toBytes("myQualifier2")); ``` 示例4:扫描数据 ``` Configuration config = HBaseConfiguration.create(); HTable table = new HTable(config, "myTable"); Scan scan = new Scan(); ResultScanner scanner = table.getScanner(scan); for (Result result : scanner) { byte[] value1 = result.getValue(Bytes.toBytes("myFamily1"), Bytes.toBytes("myQualifier1")); byte[] value2 = result.getValue(Bytes.toBytes("myFamily2"), Bytes.toBytes("myQualifier2")); // do something with the values } scanner.close(); ``` 希望这些示例能够帮助您编写自己的HBase API代码

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值