您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。