HBase(六):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 );

	}
}

 

转载于:https://my.oschina.net/gently/blog/676900

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值