HBase基本API操作之CRUD

44次阅读
没有评论

这篇文章将为大家详细讲解有关 HBase 基本 API 操作之 CRUD-Util 怎么用,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一:创建 HBaseUtil。

public class HBaseUtil {
 private static Configuration conf;
 private static Connection con;
 // 初始化联接
 static{
 // 获得配置文件对象:conf = HBaseConfiguration.create();
 conf.set( hbase.zookeeper.quorum ,  192.168.226.129 
 try {
 // 获得连接对象:con = ConnectionFactory.createConnection(conf);
 } catch (IOException e) {e.printStackTrace();
 // 获得连接:public static Connection getCon(){if( con == null || con.isClosed() ){
 try {con = ConnectionFactory.createConnection(conf);
 } catch (IOException e) {e.printStackTrace();
 return con;
 // 关闭连接:public static void closeCon(){if( con != null ){
 try {con.close();
 } catch (IOException e) {e.printStackTrace();

// 创建表:public static void createTable(String tableName,String...FamilyColumn ){TableName tn = TableName.valueOf(tableName); try {Admin admin = getCon().getAdmin(); HTableDescriptor htd = new HTableDescriptor(tn); for(String fc : FamilyColumn){HColumnDescriptor hcd = new HColumnDescriptor(fc); htd.addFamily(hcd); admin.createTable(htd); admin.close();} catch (IOException e) {e.printStackTrace(); // 删除表:public static void dropTable(String tableName){TableName tn = TableName.valueOf(tableName); try {Admin admin = con.getAdmin(); admin.disableTable(tn); admin.deleteTable(tn); admin.close();} catch (IOException e) {e.printStackTrace(); // 插入或更新数据 public static boolean insert(String tableName,String rowKey,String family,String qualifier,String value){ try {Table table = con.getTable(TableName.valueOf(tableName)); Put put = new Put(Bytes.toBytes(rowKey)); put.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(value)); table.put(put); return true; } catch (IOException e) {e.printStackTrace(); }finally{// HBaseUtil.closeCon(); return false; // 删除数据记录 public static boolean delete(String tableName,String rowKey,String family,String qualifier){ try {Table table = con.getTable(TableName.valueOf(tableName)); Delete del = new Delete( Bytes.toBytes(rowKey)); if( qualifier != null ){del.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier)); }else if( family != null ){del.addFamily( Bytes.toBytes(family) ); table.delete(del); return true; } catch (IOException e) {e.printStackTrace(); }finally{//HBaseUtil.closeCon(); return false; // 删除整行的数据记录 public static boolean delete(String tableName,String rowKey){return delete(tableName, rowKey, null, null); // 删除某行某列的数据记录 public static boolean delete(String tableName, String rowKey, String family){return delete(tableName, rowKey, family, null); // 数据读取 // 取到一个值 public static String byGet(String tableName,String rowKey,String family,String qualifier){ try {Table table = con.getTable(TableName.valueOf(tableName)); Get get = new Get(Bytes.toBytes(rowKey)); get.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier)); Result result = table.get(get); return Bytes.toString(CellUtil.cloneValue( result.listCells().get(0))); } catch (IOException e) {e.printStackTrace(); return null; // 取到一个族列的值 public static Map String,String  byGet(String tableName,String rowKey, String family ){ Map String,String  map = null; try {Table table = getCon().getTable( TableName.valueOf(tableName)); Get get = new Get(Bytes.toBytes(rowKey)); get.addFamily( Bytes.toBytes( family )); Result result = table.get(get); List Cell  list = result.listCells(); map = (Map String, String) (list.size()   0 ? new HashMap String,String () : result); for( Cell cell : list ){map.put(Bytes.toString(CellUtil.cloneQualifier(cell)), Bytes.toString(CellUtil.cloneValue(cell))); } catch (IOException e) {e.printStackTrace(); return map; // 取到多个列族的值 public static Map String,Map String,String  byGet(String tableName,String rowKey){ Map String,Map String,String  maps = null; try {Table table = con.getTable(TableName.valueOf(tableName)); Get get = new Get(Bytes.toBytes(rowKey)); Result result = table.get(get); List Cell  list = result.listCells(); maps = (Map String, Map String, String) (list.size()  0 ? new HashMap String,Map String,String () : result); for( Cell cell : list){String familyName = Bytes.toString(CellUtil.cloneFamily(cell)); if( maps.get(familyName) == null ){maps.put(familyName, new HashMap String,String () ); maps.get(familyName).put(Bytes.toString(CellUtil.cloneQualifier(cell)), Bytes.toString(CellUtil.cloneValue(cell))); } catch (IOException e) {e.printStackTrace(); return maps; }

二:单元测试类  TestHBaseJUnit。

public class TestHBaseJUnit {
 // 创建表并列出所有的表:@Test
 public void testCreateTable() throws IOException {
 // 创建两张表: person  与  student 
 HBaseUtil.createTable( person ,  famcolumn1 , famcolumn2 , famcolumn3 
 HBaseUtil.closeCon();
 HBaseUtil.createTable( student ,  famcolumn1 , famcolumn2 , famcolumn3 
 HBaseUtil.closeCon();
 // 列出所有表:Admin admin = HBaseUtil.getCon().getAdmin();
 TableName[] tables = admin.listTableNames();
 for (TableName tableName : tables) {System.out.println(  tableName:   + tableName );
 //// 判断数据表是否存在。@Test
 public void testTableIsExists() throws IOException{
 TableName tn = TableName.valueOf( person  // 创建表名对象
 Admin admin = HBaseUtil.getCon().getAdmin();
 boolean isExists = admin.tableExists(tn);
 System.out.println(  person is Exists:  + isExists );
 // 删除表
 @Test
 public void testDropTable() throws IOException{Admin admin = HBaseUtil.getCon().getAdmin();
 TableName tn = TableName.valueOf( student 
 System.out.println( admin.isTableDisabled(tn) );
 HBaseUtil.dropTable( student 
 admin = HBaseUtil.getCon().getAdmin();
 // 判断数据表是否还存在。boolean isExists = admin.tableExists(tn);
 System.out.println(  student is Exists:  + isExists );
 // 对表插入数据记录
 @Test
 public void testInsert() throws TableNotFoundException, IOException{
 HBaseUtil.insert( person ,  row1 ,  famcolumn1 ,  name ,  Berg 
 HBaseUtil.insert( person ,  row1 ,  famcolumn1 ,  age ,  22 
 HBaseUtil.insert( person ,  row1 ,  famcolumn1 ,  sex ,  male 
 HBaseUtil.insert( person ,  row1 ,  famcolumn2 ,  name ,  BergBerg 
 HBaseUtil.insert( person ,  row1 ,  famcolumn2 ,  age ,  21 
 HBaseUtil.insert( person ,  row1 ,  famcolumn2 ,  sex ,  male 
 HBaseUtil.insert( person ,  row1 ,  famcolumn3 ,  name ,  BergBergBerg 
 HBaseUtil.insert( person ,  row1 ,  famcolumn3 ,  age ,  23 
 HBaseUtil.insert( person ,  row1 ,  famcolumn3 ,  sex ,  famale 

Admin admin = HBaseUtil.getCon().getAdmin(); TableName tn = TableName.valueOf( person System.out.println( admin.getTableDescriptor(tn) ); // 取到一个值 @Test public void testByGet1(){ String result = HBaseUtil.byGet( person ,  row1 ,  famcolumn1 ,  name System.out.println(   result:   + result ); // 取到一个族列的值 @Test public void testByGet2(){ Map String, String  result = HBaseUtil.byGet( person ,  row1 ,  famcolumn1 System.out.println(   result:   + result ); // 取到多个列族的值 @Test public void testByGet3(){ Map String, Map String, String  result = HBaseUtil.byGet( person ,  row1 System.out.println(   result:   + result ); // 删除数据记录 @Test public void testDelete1(){ HBaseUtil.delete( person ,  row1 ,  famcolumn3 ,  age // 删除数据后: Map String, Map String, String  result = HBaseUtil.byGet( person ,  row1 System.out.println(   result:   + result ); // 删除某列数据 @Test public void testTelete2(){ HBaseUtil.delete( person ,  row1 ,  famcolumn3 // 删除数据后: Map String, Map String, String  result = HBaseUtil.byGet( person ,  row1 System.out.println(   result:   + result ); // 删除整行的数据 @Test public void testTelete3(){ HBaseUtil.delete( person ,  row1 // 删除数据后: Map String, Map String, String  result = HBaseUtil.byGet( person ,  row1 System.out.println(   result:   + result ); }

关于“HBase 基本 API 操作之 CRUD-Util 怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。