/**
* 封装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();
}
}
}原文:http://blog.csdn.net/shenfuli/article/details/46416609