hbase 2.0.2 增删改查


 1 package cn.hbase.demo;  2 
 3 import java.io.IOException;  4 import java.util.Iterator;  5 
 6 import org.apache.hadoop.conf.Configuration;  7 import org.apache.hadoop.hbase.Cell;  8 import org.apache.hadoop.hbase.CellScanner;  9 import org.apache.hadoop.hbase.CellUtil;  10 import org.apache.hadoop.hbase.HBaseConfiguration;  11 import org.apache.hadoop.hbase.HColumnDescriptor;  12 import org.apache.hadoop.hbase.HTableDescriptor;  13 import org.apache.hadoop.hbase.TableName;  14 import org.apache.hadoop.hbase.client.Admin;  15 import org.apache.hadoop.hbase.client.Connection;  16 import org.apache.hadoop.hbase.client.ConnectionFactory;  17 import org.apache.hadoop.hbase.client.Delete;  18 import org.apache.hadoop.hbase.client.Get;  19 import org.apache.hadoop.hbase.client.Put;  20 import org.apache.hadoop.hbase.client.Result;  21 import org.apache.hadoop.hbase.client.ResultScanner;  22 import org.apache.hadoop.hbase.client.Scan;  23 import org.apache.hadoop.hbase.client.Table;  24 import org.apache.hadoop.hbase.regionserver.StripeStoreFileManager;  25 import org.apache.hadoop.hbase.util.Bytes;  26 
 27 /**
 28  * 增删改查 注意hbase中一行指的是一个列族,所以一行可能含有多条数据  29  *  30  * @author Tele  31  *  32  */
 33 
 34 public class CrudTable {  35     private static Connection conn;  36     private static Configuration conf;  37     private static Admin admin;  38     static {  39         try {  40             conf = HBaseConfiguration.create();  41             conn = ConnectionFactory.createConnection(conf);  42             admin = conn.getAdmin();  43         } catch (IOException e) {  44  e.printStackTrace();  45  }  46 
 47  }  48 
 49     public static boolean isExistTable(String tableName) throws IOException {  50         return admin.tableExists(TableName.valueOf(tableName));  51  }  52 
 53     /**
 54  * 创建表  55  *  56  * @param tableName  57  * @param columnFamily 列族,创建表时可以传递多个列族过来  58  * @throws IOException  59      */
 60     public static void createTable(String tableName, String... columnFamily) throws IOException {  61 
 62         if (isExistTable(tableName)) {  63             System.out.println("已经存在表" + tableName);  64             return;  65         } else {  66             HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf(tableName));  67             for (String cf : columnFamily) {  68                 tableDescriptor.addFamily(new HColumnDescriptor(cf));  69  }  70  admin.createTable(tableDescriptor);  71             System.out.println("成功创建了表" + tableName);  72  }  73  }  74 
 75     /**
 76  * 创建多版本的表  77  *  78  * @param tableName  79  * @param columnFamily 列族,创建表时可以传递多个列族过来  80  * @throws IOException  81      */
 82     public static void createTableMultiVersion(String tableName, String veriosn, String... columnFamily)  83             throws IOException {  84 
 85         if (isExistTable(tableName)) {  86             System.out.println("已经存在表" + tableName);  87             return;  88         } else {  89             HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf(tableName));  90             for (String cf : columnFamily) {  91                 tableDescriptor.addFamily(new HColumnDescriptor(cf).setVersions(1, 3));  92  }  93  admin.createTable(tableDescriptor);  94             System.out.println("成功创建了表" + tableName);  95  }  96  }  97 
 98     /**
 99  * 删除表之前必须先禁用表 100  * 101  * @param tableName 102  * @throws IOException 103      */
104     public static void dropTable(String tableName) throws IOException { 105         if (isExistTable(tableName)) { 106  admin.disableTable(TableName.valueOf(tableName)); 107  admin.deleteTable(TableName.valueOf(tableName)); 108             System.out.println("表" + tableName + "删除成功"); 109         } else { 110             System.out.println("表" + tableName + "不存在"); 111  } 112 
113  } 114 
115     /**
116  * 添加一条数据 117  * 118  * @param tableName 119  * @param rowKey 行键 120  * @param cf 列族 121  * @param cn 列名 122  * @param value 123  * @throws IOException 124      */
125     public static void addRow(String tableName, String rowKey, String cf, String cn, String value) throws IOException { 126         // 先判断表是否存在
127         if (isExistTable(tableName)) { 128             Table table = conn.getTable(TableName.valueOf(tableName)); 129             Put put = new Put(Bytes.toBytes(rowKey)); 130  put.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn), Bytes.toBytes(value)); 131 
132  table.put(put); 133             System.out.println("成功插入一条数据"); 134  table.close(); 135         } else { 136             System.out.println("待插入的表不存在"); 137  } 138  } 139 
140     /**
141  * 删除一条数据 142  * 143  * @param tableName 144  * @param rowKey 145  * @param cf 146  * @param cn 147  * @throws IOException 148      */
149     public static void deleteRow(String tableName, String rowKey, String cf, String cn) throws IOException { 150         if (isExistTable(tableName)) { 151             Table table = conn.getTable(TableName.valueOf(tableName)); 152             Delete delete = new Delete(Bytes.toBytes(rowKey)); 153  delete.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn)); 154  table.delete(delete); 155             System.out.println("删除成功"); 156  table.close(); 157         } else { 158             System.out.println("表不存在"); 159  } 160 
161  } 162 
163     /**
164  * 删除一行数据,即删除该行数据对应的一个列族的数据 165  * 166  * @param tableName 167  * @param rowKey 168  * @param cf 169  * @throws IOException 170      */
171     public static void deleteMultiRow(String tableName, String rowKey, String cf) throws IOException { 172         if (isExistTable(tableName)) { 173             Table table = conn.getTable(TableName.valueOf(tableName)); 174             Delete delete = new Delete(Bytes.toBytes(rowKey)); 175  delete.addFamily(Bytes.toBytes(cf)); 176  table.delete(delete); 177             System.out.println("删除成功"); 178  table.close(); 179         } else { 180             System.out.println("表不存在"); 181  } 182  } 183 
184     /**
185  * 查询指定列族.列名的数据,一个reuslt代表一个列的全部数据 186  * 187  * @param tableName 188  * @param rowKey 189  * @param cf 190  * @param cn 191  * @throws IOException 192      */
193     public static void getRow(String tableName, String rowKey, String cf, String cn) throws IOException { 194         if (isExistTable(tableName)) { 195             Table table = conn.getTable(TableName.valueOf(tableName)); 196             Get get = new Get(Bytes.toBytes(rowKey)); 197  get.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn)); 198             Result result = table.get(get); 199 
200             // 遍历result
201             CellScanner cellScanner = result.cellScanner(); 202             while (cellScanner.advance()) { 203                 Cell cell = cellScanner.current(); 204                 System.out.println("行键:" + Bytes.toString(CellUtil.copyRow(cell))); 205                 System.out.println("列族:" + Bytes.toString(CellUtil.cloneFamily(cell))); 206                 System.out.println("列名:" + Bytes.toString(CellUtil.cloneQualifier(cell))); 207                 System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell))); 208  } 209  table.close(); 210         } else { 211             System.out.println("表不存在"); 212  } 213  } 214 
215     /**
216  * 查询指定列多个版本的数据 217  * 218  * @param tableName 219  * @param rowKey 220  * @param cf 221  * @param cn 222  * @throws IOException 223      */
224     public static void getRowMultiVersion(String tableName, String rowKey, String cf, String cn) throws IOException { 225         if (isExistTable(tableName)) { 226             Table table = conn.getTable(TableName.valueOf(tableName)); 227             Get get = new Get(Bytes.toBytes(rowKey)); 228 
229             // get.setMaxVersions();
230  get.readAllVersions(); 231 
232  get.addColumn(Bytes.toBytes(cf), Bytes.toBytes(cn)); 233             Result result = table.get(get); 234 
235             // 遍历result
236             CellScanner cellScanner = result.cellScanner(); 237             while (cellScanner.advance()) { 238                 Cell cell = cellScanner.current(); 239                 System.out.println("行键:" + Bytes.toString(CellUtil.copyRow(cell))); 240                 System.out.println("列族:" + Bytes.toString(CellUtil.cloneFamily(cell))); 241                 System.out.println("列名:" + Bytes.toString(CellUtil.cloneQualifier(cell))); 242                 System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell))); 243  } 244  table.close(); 245         } else { 246             System.out.println("表不存在"); 247  } 248  } 249 
250     /**
251  * 查询指定列族数据 一个reuslt代表一个行键的全部数据 252  * 253  * @param tableName 254  * @param rowKey 255  * @param cf 256  * @param cn 257  * @throws IOException 258      */
259     public static void getMultiRows(String tableName, String rowKey, String cf) throws IOException { 260         if (isExistTable(tableName)) { 261             Table table = conn.getTable(TableName.valueOf(tableName)); 262             Get get = new Get(Bytes.toBytes(rowKey)); 263  get.addFamily(Bytes.toBytes(cf)); 264             Result result = table.get(get); 265 
266             // 遍历result
267             CellScanner cellScanner = result.cellScanner(); 268             while (cellScanner.advance()) { 269                 Cell cell = cellScanner.current(); 270                 System.out.println("行键:" + Bytes.toString(CellUtil.copyRow(cell))); 271                 System.out.println("列族:" + Bytes.toString(CellUtil.cloneFamily(cell))); 272                 System.out.println("列名:" + Bytes.toString(CellUtil.cloneQualifier(cell))); 273                 System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell))); 274  System.out.println(); 275  } 276  table.close(); 277         } else { 278             System.out.println("表不存在"); 279  } 280  } 281 
282     /**
283  * 查询全部数据 一个reuslt代表一个列族的全部数据 284  * 285  * @param tableName 286  * @throws IOException 287      */
288     public static void scanTable(String tableName) throws IOException { 289         if (isExistTable(tableName)) { 290             Table table = conn.getTable(TableName.valueOf(tableName)); 291 
292             Scan scan = new Scan(); 293             ResultScanner scanner = table.getScanner(scan); 294             // 遍历scanner
295             Iterator<Result> iterator = scanner.iterator(); 296             while (iterator.hasNext()) { 297                 Result result = iterator.next(); 298                 // 遍历result
299                 CellScanner cellScanner = result.cellScanner(); 300                 while (cellScanner.advance()) { 301                     Cell cell = cellScanner.current(); 302                     System.out.println("行键:" + Bytes.toString(CellUtil.copyRow(cell))); 303                     System.out.println("列族:" + Bytes.toString(CellUtil.cloneFamily(cell))); 304                     System.out.println("列名:" + Bytes.toString(CellUtil.cloneQualifier(cell))); 305                     System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell))); 306  } 307  System.out.println(); 308  } 309 
310  table.close(); 311         } else { 312             System.out.println("表不存在"); 313  } 314 
315  } 316 
317     /**
318  * 从指定行scan表 319  * 320  * @param tableName 321  * @param startRow 322  * @throws IOException 323      */
324     public static void scanTableByRow(String tableName, String startRow) throws IOException { 325         if (isExistTable(tableName)) { 326             Table table = conn.getTable(TableName.valueOf(tableName)); 327 
328             Scan scan = new Scan(); 329             // scan.setStartRow(Bytes.toBytes(startRow));
330  scan.withStartRow(Bytes.toBytes(startRow)); 331             ResultScanner scanner = table.getScanner(scan); 332             // 遍历scanner
333             Iterator<Result> iterator = scanner.iterator(); 334             while (iterator.hasNext()) { 335                 Result result = iterator.next(); 336                 // 遍历result
337                 CellScanner cellScanner = result.cellScanner(); 338                 while (cellScanner.advance()) { 339                     Cell cell = cellScanner.current(); 340                     System.out.println("行键:" + Bytes.toString(CellUtil.copyRow(cell))); 341                     System.out.println("列族:" + Bytes.toString(CellUtil.cloneFamily(cell))); 342                     System.out.println("列名:" + Bytes.toString(CellUtil.cloneQualifier(cell))); 343                     System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell))); 344  } 345  System.out.println(); 346  } 347 
348  table.close(); 349         } else { 350             System.out.println("表不存在"); 351  } 352 
353  } 354 
355     public static void main(String[] args) throws IOException { 356 // createTable("yeye","info","hobby"); 357 // dropTable("yeye"); 358 // addRow("yeye","1","info","name","tele"); 359 // deleteRow("yeye","1","info","name"); 360 // deleteMultiRow("yeye","1","info"); 361 
362 // getRow("yeye","1","info","name"); 363 // getMultiRows("yeye","1","info"); 364 
365 // scanTable("yeye"); 366 
367 // scanTableByRow("yeye","2"); 368 
369         // 创建多版本的表 370         // createTableMultiVersion("staff","3","info","sex");
371 
372         /*
373  * addRow("staff","1","info","name","wyc"); 374  * addRow("staff","1","info","name","baba"); 375  * addRow("staff","1","info","name","yeye"); 376          */
377 
378         // 查询多版本
379         getRowMultiVersion("staff", "1", "info", "name"); 380 
381  } 382 
383 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM