packagecn.luxh.app.util;importjava.io.IOException;importjava.util.Arrays;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.hbase.HBaseConfiguration;importorg.apache.hadoop.hbase.HColumnDescriptor;importorg.apache.hadoop.hbase.HTableDescriptor;importorg.apache.hadoop.hbase.MasterNotRunningException;importorg.apache.hadoop.hbase.ZooKeeperConnectionException;importorg.apache.hadoop.hbase.client.Get;importorg.apache.hadoop.hbase.client.HBaseAdmin;importorg.apache.hadoop.hbase.client.HTable;importorg.apache.hadoop.hbase.client.Put;importorg.apache.hadoop.hbase.client.Result;importorg.apache.hadoop.hbase.client.ResultScanner;importorg.apache.hadoop.hbase.client.Scan;importorg.apache.hadoop.hbase.filter.CompareFilter.CompareOp;importorg.apache.hadoop.hbase.filter.Filter;importorg.apache.hadoop.hbase.filter.FilterList;importorg.apache.hadoop.hbase.filter.FilterList.Operator;importorg.apache.hadoop.hbase.filter.SingleColumnValueFilter;importorg.apache.hadoop.hbase.util.Bytes;public classHBaseUtil {/*** 初始化HBase的配置文件
*Configuration getConfiguration(){
Configuration conf=HBaseConfiguration.create();//和hbase-site.xml中配置的一致
conf.set("hbase.zooker.quorum", "h1,h2,h2");returnconf;
}/*** 实例化HBaseAdmin,HBaseAdmin用于对表的元素据进行操作
*@return*@throwsMasterNotRunningException
*@throwsZooKeeperConnectionExceptionHBaseAdmin getHBaseAdmin() throwsMasterNotRunningException, ZooKeeperConnectionException{return newHBaseAdmin(getConfiguration());
}/*** 创建表
*@paramtableName
表名
*@paramcolumnFamilies 列族
*@throwsIOExceptioncreateTable(String tableName,String...columnFamilies) throwsIOException {
HTableDescriptor htd= new HTableDescriptor(tableName.getBytes());//
for(String fc : columnFamilies) {
htd.addFamily(newHColumnDescriptor(fc));
}
getHBaseAdmin().createTable(htd);
}/*** 获取HTableDescriptor
*@paramtableName
*@return*@throwsIOExceptionHTableDescriptor getHTableDescriptor(byte[] tableName) throwsIOException{returngetHBaseAdmin().getTableDescriptor(tableName);
}/*** 获取表
*@paramtableName 表名
*@return*@throwsIOExceptionHTable getHTable(String tableName) throwsIOException{return newHTable(getConfiguration(),tableName);
}/*** 获取Put,Put是插入一行数据的封装格式
*@paramtableName
*@paramrow
*@paramcolumnFamily
*@paramqualifier
*@paramvalue
*@return*@throwsIOExceptionPut getPut(String row,String columnFamily,String qualifier,String value) throwsIOException{
Put put= newPut(row.getBytes());if(qualifier==null||"".equals(qualifier)) {
put.add(columnFamily.getBytes(),null, value.getBytes());
}else{
put.add(columnFamily.getBytes(), qualifier.getBytes(), value.getBytes());
}returnput;
}/*** 查询某一行的数据
*@paramtableName 表名
*@paramrow
行键
*@return*@throwsIOExceptionResult getResult(String tableName,String row) throwsIOException {
Get get= newGet(row.getBytes());
HTable htable=getHTable(tableName);
Result result=htable.get(get);
htable.close();returnresult;
}/*** 条件查询
*@paramtableName
表名
*@paramcolumnFamily 列族
*@paramqueryCondition 查询条件值
*@parambegin
查询的起始行
*@paramend
查询的终止行
*@return*@throwsIOExceptionResultScanner getResultScanner(String tableName,String columnFamily,String queryCondition,String begin,String end) throwsIOException{
Scan scan= newScan();//设置起始行
scan.setStartRow(Bytes.toBytes(begin));//设置终止行
scan.setStopRow(Bytes.toBytes(end));//指定要查询的列族
scan.addColumn(Bytes.toBytes(columnFamily),null);//查询列族中值等于queryCondition的记录
Filter filter1 = new SingleColumnValueFilter(Bytes.toBytes(columnFamily),null,CompareOp.EQUAL,Bytes.toBytes(queryCondition));//Filter filter2 = new SingleColumnValueFilter(Bytes.toBytes(columnFamily),null,CompareOp.EQUAL,Bytes.toBytes("chuliuxiang"));
FilterList filterList= newFilterList(Operator.MUST_PASS_ONE,Arrays.asList(filter1));
scan.setFilter(filterList);
HTable htable=getHTable(tableName);
ResultScanner rs=htable.getScanner(scan);
htable.close();returnrs;
}
}