hbase帮助类

package cn.piesat.dbhelper;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.filter.FilterList.Operator;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.log4j.Logger;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

/**
* hbase数据库基本CRUD接口
* @author wudongdong
*/
public class HbaseHelper {

private Logger logger = Logger.getLogger(HbaseHelper.class);
private Admin admin = null;
private Connection connection = null;
private Configuration conf = null;

/**
 * 初始化
 * @param path 配置文件路径
 */
public HbaseHelper(String path) {
    try {
        InputStream inputStream = HbaseHelper.class.getClassLoader().getResourceAsStream(path);
        Properties properties = new Properties();
        properties.load(inputStream);
        conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", properties.getProperty("zookeeperAddress"));
        conf.set("hbase.zookeeper.property.clientPort", properties.getProperty("zookeeperPort"));
        connection = ConnectionFactory.createConnection(conf);
        this.admin = this.connection.getAdmin();
    }catch (Exception e){
        e.printStackTrace();
    }
}

/**关闭连接*/
public void closeConnect(){
    try{
        if (connection != null && admin != null){
            connection.close();
            admin.close();
        }
    }catch (Exception e){
        e.printStackTrace();
    }
}

/**
 * 创建表
 * @param tableName 表名
 * @param colFamiles 列族集合
 * @return 创建是否成功
 */
public Boolean createTable(String tableName, String[] colFamiles) {
    Boolean flag = false;
    try {
        TableName tableNameObj = TableName.valueOf(tableName);
        if (admin.tableExists(TableName.valueOf(tableName))) {
            logger.info(tableName + "exist!");
        } else {
            HTableDescriptor desc = new HTableDescriptor(tableNameObj);
            for (String colFamily : colFamiles) {
                desc.addFamily(new HColumnDescriptor(colFamily));
            }
            admin.createTable(desc);
            flag = true;
        }
    }catch (Exception e){
        e.printStackTrace();
    }
    return flag;
}

/**
 * 删除表
 * @param tableName 表名
 * @return 删除是否成功
 */
public Boolean deleteTable(String tableName) {
    Boolean flag = false;
    try {
        TableName tableNameObj = TableName.valueOf(tableName);
        if (admin.tableExists(tableNameObj)) {
            admin.disableTable(tableNameObj);
            admin.deleteTable(tableNameObj);
            flag = true;
        } else {
            logger.info(tableName + "not exist!");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return flag;
}

public Boolean tableExist(String tableName) {
    Boolean result = false;
    try {
        TableName tableNameObj = TableName.valueOf(tableName);
        result = admin.tableExists(tableNameObj);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}

/**
 * 添加一条记录
 * @param tableName 表名
 * @param put 要保存的对象
 * @return 插入是否成功
 */
public Boolean insertData(String tableName, Put put) {
    Boolean flag = false;
    try {
        TableName tableNameObj = TableName.valueOf(tableName);
        if (admin.tableExists(tableNameObj)) {
            Table table = connection.getTable(tableNameObj);
            table.put(put);
            table.close();
            flag = true;
        } else {
            logger.info(tableName + "not exist!");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return flag;
}

/**
 * 批量插入数据
 * @param tableName 表名
 * @param puts put集合
 * @return 插入是否成功
 */
public Boolean insertBatchData(String tableName, List<Put> puts) {
    Boolean flag = false;
    try {
        TableName tableNameObj = TableName.valueOf(tableName);
        if (admin.tableExists(tableNameObj)) {
            Table table = connection.getTable(tableNameObj);
            table.put(puts);
            table.close();
            flag = true;
        } else {
            logger.info(tableName + "not exist!");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return flag;
}

/**
 * 根据rowkey查询一条数据
 * @param tableName 表名
 * @param rowkey rowkey
 * @return 查询结果
 */
public Result getScanResult(String tableName, String rowkey) {
    Result result = null;
    try {
        TableName tableNameObj = TableName.valueOf(tableName);
        if (admin.tableExists(tableNameObj)) {
            Table table = connection.getTable(tableNameObj);
            Get get = new Get(Bytes.toBytes(rowkey));
            result = table.get(get);
            table.close();
        } else {
            logger.info(tableName + "not exist!");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}

/**
 * 文件查找
 * @param tableName 表名
 * @param rowKey rowKey
 * @return 文件字节
 */
public byte[] getByteResult(String tableName, String rowKey) {
    byte[] data = null;
    try {
        TableName tableNameObj = TableName.valueOf(tableName);
        if (admin.tableExists(tableNameObj)) {
            Table table = connection.getTable(tableNameObj);
            Get get = new Get(Bytes.toBytes(rowKey));
            Result result = table.get(get);
            data = result.value();
            table.close();
        } else {
            logger.info(tableName + "not exist!");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return data;
}

/**
 * 小于查询
 * @param tableName 表名
 * @param value 比较值
 * @return 查询结果
 */
public List<Result> lessFilterFind(String tableName,String value){
    List<Result> results = new ArrayList<>();
    try {
        TableName tableNameObj = TableName.valueOf(tableName);
        if (admin.tableExists(tableNameObj)) {
            results = new ArrayList<>();
            Table table = connection.getTable(tableNameObj);
            Scan scan = new Scan();
            Filter filter = new RowFilter(CompareFilter.CompareOp.LESS, new BinaryComparator(Bytes.toBytes(value)));
            scan.setFilter(filter);
            ResultScanner scanner = table.getScanner(scan);
            for(Result result : scanner){
                results.add(result);
            }
            scanner.close();
            table.close();
        }
    }catch (Exception e){
        e.printStackTrace();
    }
    return results;
}

/**
 * 小于或等于查找
 * @param tableName 表名
 * @param value 比较值
 * @return 查询结果
 */
public List<Result> lessOrEqualFilterFind(String tableName,String value){
    List<Result> results = new ArrayList<>();
    try {
        TableName tableNameObj = TableName.valueOf(tableName);
        if (admin.tableExists(tableNameObj)) {
            results = new ArrayList<>();
            Table table = connection.getTable(tableNameObj);
            Scan scan = new Scan();
            Filter filter = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes(value)));
            scan.setFilter(filter);
            ResultScanner scanner = table.getScanner(scan);
            for(Result result : scanner){
                results.add(result);
            }
            scanner.close();
            table.close();
        }
    }catch (Exception e){
        e.printStackTrace();
    }
    return results;
}

/**
 * 大于查询
 * @param tableName 表名
 * @param value 比较值
 * @return 查询结果
 */
public List<Result> greaterFilterFind(String tableName,String value){
    List<Result> results = new ArrayList<>();
    try {
        TableName tableNameObj = TableName.valueOf(tableName);
        if (admin.tableExists(tableNameObj)) {
            results = new ArrayList<>();
            Table table = connection.getTable(tableNameObj);
            Scan scan = new Scan();
            Filter filter = new RowFilter(CompareFilter.CompareOp.GREATER, new BinaryComparator(Bytes.toBytes(value)));
            scan.setFilter(filter);
            ResultScanner scanner = table.getScanner(scan);
            for(Result result : scanner){
                results.add(result);
            }
            scanner.close();
            table.close();
        }
    }catch (Exception e){
        e.printStackTrace();
    }
    return results;
}

/**
 * 大于或等于查询
 * @param tableName 表名
 * @param value 比较值
 * @return 查询结果
 */
public List<Result> greaterOrEqualFilterFind(String tableName,String value){
    List<Result> results = new ArrayList<>();
    try {
        TableName tableNameObj = TableName.valueOf(tableName);
        if (admin.tableExists(tableNameObj)) {
            results = new ArrayList<>();
            Table table = connection.getTable(tableNameObj);
            Scan scan = new Scan();
            Filter filter = new RowFilter(CompareFilter.CompareOp.GREATER_OR_EQUAL, new BinaryComparator(Bytes.toBytes(value)));
            scan.setFilter(filter);
            ResultScanner scanner = table.getScanner(scan);
            for(Result result : scanner){
                results.add(result);
            }
            scanner.close();
            table.close();
        }
    }catch (Exception e){
        e.printStackTrace();
    }
    return results;
}

/**
 * LIKE查询
 * @param tableName 表名
 * @param value 要匹配的值
 * @return 查找结果
 */
public List<Result> likeFilterFind(String tableName,String value){
    List<Result> results = new ArrayList<>();
    try {
        TableName tableNameObj = TableName.valueOf(tableName);
        if (admin.tableExists(tableNameObj)) {
            results = new ArrayList<>();
            Table table = connection.getTable(tableNameObj);
            Scan scan = new Scan();
            Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator(value));
            scan.setFilter(filter);
            ResultScanner scanner = table.getScanner(scan);
            for(Result result : scanner){
                results.add(result);
            }
            scanner.close();
            table.close();
        }
    }catch (Exception e){
        e.printStackTrace();
    }
    return results;
}

/**
 * 查询所有数据
 * @param tableName 表名
 * @return 查询的结果
 */
public List<Result> getResultScanner(String tableName) {
    List<Result> results = null;
    try {
        TableName tableNameObj = TableName.valueOf(tableName);
        if (admin.tableExists(tableNameObj)) {
            results = new ArrayList<>();
            Table table = connection.getTable(tableNameObj);
            Scan scan = new Scan();
            ResultScanner scanner = table.getScanner(scan);
            for(Result result : scanner){
                results.add(result);
            }
            scanner.close();
            table.close();
        } else {
            logger.info(tableName + "not exist!");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return results;
}

/**
 * 根据范围查询
 * @param tableName 表名
 * @param startRow 起始行
 * @param stopRow 结束行
 * @return 查询的结果
 */
public List<Result> getResultScanner(String tableName, String startRow, String stopRow) {
    List<Result> results = null;
    try {
        TableName tableNameObj = TableName.valueOf(tableName);
        if (admin.tableExists(tableNameObj)) {
            results = new ArrayList<>();
            Table table = connection.getTable(tableNameObj);
            Scan scan = new Scan();
            scan.setStartRow(Bytes.toBytes(startRow));
            scan.setStopRow(Bytes.toBytes(stopRow));
            ResultScanner scanner = table.getScanner(scan);
            for(Result result : scanner){
                results.add(result);
            }
            scanner.close();
            table.close();
        } else {
            logger.info(tableName + "not exist!");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return results;
}

/**
 * 根据rowkey删除记录
 * @param tableName 表名
 * @param rowKey rowKey
 * @return 删除是否成功
 */
public Boolean delete(String tableName, String rowKey) {
    Boolean flag = false;
    try {
        TableName tableNameObj = TableName.valueOf(tableName);
        if (admin.tableExists(tableNameObj)) {
            Table table = connection.getTable(tableNameObj);
            Delete delete = new Delete(Bytes.toBytes(rowKey));
            table.delete(delete);
            table.close();
            flag = true;
        }else {
            logger.info(tableName + "not exist!");
        }
    } catch (Exception e) {
        e.printStackTrace();
        logger.error(e.toString());
    }
    return flag;
}

/**
 * 根据条件查询
 * @param tableName 表名
 * @param filters 查询条件
 * @return 查询结果集
 */
public List<Result> getResultScannerByFilterList(String tableName, List<Filter> filters) {
    List<Result> results = null;
    try {
        TableName tableNameObj = TableName.valueOf(tableName);
        if (admin.tableExists(tableNameObj)) {
            results = new ArrayList<>();
            Table table = connection.getTable(tableNameObj);
            Scan scan = new Scan();
            FilterList filterList = new FilterList(Operator.MUST_PASS_ALL, filters);
            scan.setFilter(filterList);
            ResultScanner scanner = table.getScanner(scan);
            for(Result result : scanner){
                results.add(result);
            }
            scanner.close();
            table.close();
        }else{
            logger.info(tableName + "not exist!");
        }
    } catch (Exception e) {
        e.printStackTrace();
        logger.error(e.toString());
    }
    return results;
}

/**
 * 多条件查询
 * @param tableName 表名
 * @param startRow 开始查询行
 * @param stopRow 结束查询行
 * @param filters 查询条件
 * @return 查询结果集
 */
public List<Result> getResultScannerByRowKeyAndFilters(String tableName, String startRow, String stopRow, List<Filter> filters) {
    List<Result> results = null;
    try {
        TableName tableNameObj = TableName.valueOf(tableName);
        if (admin.tableExists(tableNameObj)) {
            results = new ArrayList<>();
            Table table = connection.getTable(tableNameObj);
            Scan scan = new Scan();
            scan.setStartRow(Bytes.toBytes(startRow));
            scan.setStopRow(Bytes.toBytes(stopRow));
            if (filters.size() > 0) {
                FilterList filterList = new FilterList(Operator.MUST_PASS_ALL, filters);
                scan.setFilter(filterList);
            }
            //查询得到的结果集
            ResultScanner scanner = table.getScanner(scan);
            for (Result result : scanner) {
                results.add(result);
            }
            scanner.close();
            table.close();
        }else{
            logger.info(tableName + "not exist!");
        }
    } catch (Exception e) {
        e.printStackTrace();
        logger.error(e.toString());
    }
    return results;
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值