标签:hbase
/** * 封装HBase中存储单元cell对象 * @author shenfl * @version:V1.0 * @Date:2015-6-8 */ public class CellBean { //行健 private String rowKey; //列族 private String columnFamilly; //列名 private String columnName; //cell值 private String columnValue; public String getRowKey() { return rowKey; } public void setRowKey(String rowKey) { this.rowKey = rowKey; } public String getColumnFamilly() { return columnFamilly; } public void setColumnFamilly(String columnFamilly) { this.columnFamilly = columnFamilly; } public String getColumnName() { return columnName; } public void setColumnName(String columnName) { this.columnName = columnName; } public String getColumnValue() { return columnValue; } public void setColumnValue(String columnValue) { this.columnValue = columnValue; } }
/** * 使用HBase JAVA API操作 * * @author shenfl * */ public class HBaseTest { Configuration config = null ; // 创建操作表對象 HBaseAdmin admin = null; // hbase的连接 HConnection conn = null; @Before public void init() { config = HBaseConfiguration. create(); // HBase只需要知道ZooKeeper,就可以操作RegionServer上的數據,设置HBase 连接ZooKeeper config.set( "hbase.zookeeper.quorum" , "192.168.2.35:2181,192.168.2.36:2181,192.168.2.37:2181" ); try { conn = HConnectionManager.createConnection( config); admin = new HBaseAdmin(config ); } catch (Exception e ) { e.printStackTrace(); } } @After public void destory() { try { admin.close(); } catch (IOException e ) { e.printStackTrace(); } } @Test public void testCreate() { String tableName = "account" ; String[] columnFamilies = new String[] { "info" , "other" }; create( tableName , columnFamilies ); } //@Test public void testDrop() { drop( "account" ); } @Test public void testPut() { // 设置表对象列表 List<CellBean> cbList = new ArrayList<CellBean>(); // 设置表名account String tableName = "account" ; CellBean e = null ; for (int i =0;i <3;i ++){ e = new CellBean(); e.setRowKey( "g20142500" +i ); e.setColumnFamilly( "info" ); e.setColumnName( "username" ); e.setColumnValue( "shenfl" +i ); cbList.add( e); e = new CellBean(); e.setRowKey( "g20142500" +i ); e.setColumnFamilly( "other" ); e.setColumnName( "career" ); e.setColumnValue( "singer" +i ); cbList.add( e); } put( tableName , cbList ); } @Test public void testGetByRowKey() { String tableName = "account" ; String rowKey = "g201425001" ; List<Cell> cells = get( tableName , rowKey ); StringBuffer info = new StringBuffer(); for (Cell c : cells ) { //使用CellUtil方法输出对应列, hbase0.96 版本使用CellUtil函数 info.append( new String(CellUtil.cloneFamily(c))).append( ":" ) .append( new String(CellUtil.cloneQualifier(c))).append( "\t" ) .append( new String(CellUtil.cloneValue(c))).append( "\n" ); } System. out .println(info ); } @Test public void testScanSToEnd(){ StringBuffer sb = new StringBuffer(); String tableName = "account" ; String startRow = "g201425000" ; String stopRow = "g201425002" ; List<Result> rsList = scan( tableName , startRow , stopRow ); byte [] rowKey = null; byte [] username = null; byte [] career = null; for (Result rs :rsList ){ rowKey = rs.getRow(); username = rs .getValue(Bytes.toBytes( "info" ), Bytes.toBytes("username")); career = rs .getValue(Bytes.toBytes( "other" ), Bytes.toBytes("career")); sb.append( new String(rowKey )).append("\t" ) .append( new String(username )).append("\t" ) .append( new String(career )).append("\n" ); } System. out .println(sb .toString()); } @Test public void testScanAll() { StringBuffer sb = new StringBuffer(); List<Result> rsList = scan( "account" ); for (Result rs : rsList ) { List<Cell> listCells = rs .listCells(); for (Cell c : listCells ) { // 使用CellUtil方法输出对应列, hbase0.96 版本使用CellUtil函数 sb.append( new String(CellUtil.cloneRow(c))).append( "\t" ) .append( new String(CellUtil.cloneFamily(c))).append( ":" ) .append( new String(CellUtil.cloneQualifier(c))).append( "\t" ) .append( new String(CellUtil.cloneValue(c))).append( "\n" ); } } System. out .println(sb ); } /** * 通过rowKey插入表数据 * @param tableName 表名 * @param rowKey 行健 * @return */ public List<Cell> get(String tableName , String rowKey ) { HTableInterface table = null ; Get get = null ; Result rs = null ; List<Cell> listCells = new ArrayList<Cell>(); try { table = conn.getTable( tableName ); get = new Get(Bytes.toBytes( rowKey)); rs = table.get( get); listCells = rs .listCells(); } catch (IOException e ) { e.printStackTrace(); } return listCells ; } /** * 查询所有行 * * @param tableName * @return */ public List<Result> scan(String tableName ) { HTableInterface table = null ; List<Result> rsList = new ArrayList<Result>(); try { table = conn.getTable( tableName ); Scan scan = new Scan(); ResultScanner scanner = table .getScanner(scan ); Iterator<Result> iterator = scanner .iterator(); Result rs = null ; while (iterator .hasNext()) { rs = (Result) iterator.next(); rsList.add( rs); } } catch (Exception e ) { e.printStackTrace(); } return rsList ; } /** * 查询范围行 * @param tableName 表名 * @param startRow 开始的行健 * @param stopRow 结束行健 * @return */ public List<Result> scan(String tableName ,String startRow ,String stopRow ) { HTableInterface table = null ; List<Result> rsList = new ArrayList<Result>(); try { table = conn.getTable( tableName ); Scan scan = new Scan(); scan.setStartRow(Bytes. toBytes(startRow)); scan.setStopRow(Bytes. toBytes(stopRow)); ResultScanner rs = table .getScanner(scan ); for (Result v :rs ){ rsList.add( v); } } catch (Exception e ) { e.printStackTrace(); } return rsList ; } /** * 创建壁报 * * @param tableName * 表名 * @param cfs * 列族 */ public void create(String tableName , String[] cfs ) { if (cfs == null || cfs.length == 0) { return ; } try { // 校验表是否存储 if (admin .tableExists(tableName)) { return ; } // 创建表 HTableDescriptor desc = new HTableDescriptor(TableName.valueOf(tableName)); // 创建列族 for (String cf : cfs ) { desc.addFamily( new HColumnDescriptor(cf )); } // 创建表 admin.createTable( desc); } catch (IOException e ) { e.printStackTrace(); } } /** * 删除表 * * @param tableName * 表名 */ public void drop(String tableName ) { try { if (admin .tableExists(tableName)){ admin.disableTable( tableName ); admin.deleteTable( tableName ); } } catch (IOException e ) { e.printStackTrace(); } } /** * 向指定表插入数据 * * @param tableName * 表名 * @param values * 数据 */ public void put(String tableName , List<CellBean> values ) { if (StringUtils.isBlank( tableName ) || values == null || values .size() == 0) { return ; } Put put = null ; HTableInterface table = null ; try { table = conn.getTable( tableName ); for (CellBean v : values ) { put = new Put(Bytes.toBytes(v.getRowKey())); put.add(Bytes. toBytes(v.getColumnFamilly()), Bytes.toBytes(v.getColumnName()), Bytes. toBytes(v.getColumnValue())); table.put( put); } } catch (Exception e ) { // 实际生产环境要通过记录日志,例如: logger.warn("xxxxx",e); e.printStackTrace(); } } }
标签:hbase
原文地址:http://blog.csdn.net/shenfuli/article/details/46416609