这篇文章将为大家详细讲解有关HBase基本API操作之CRUD-Util怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
一:创建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怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。