Hbase Filter 总结s

rowfilter,根据rowkey.substr进行过滤,测试结果过滤
package cn.com.my.mycompany.query;

import cn.com.my.mycompany.util.Close;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.security.UserGroupInformation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;

public class RowFilterQuery {
    static Logger logger = LoggerFactory.getLogger(RowFilterQuery.class);
    private static Connection connection;
    private static HTable hTable;

    public static void main(String[] args) throws Exception {

        Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.property.clientPort", "2181");

        conf.set("hbase.zookeeper.quorum", "bigdata-m-001,bigdata-m-002,bigdata-m-003");
        conf.set("hbase.master", "bigdata-m-001:60000");

        conf.set("hadoop.security.authentication", "Kerberos");
        conf.set("hbase.security.authentication", "Kerberos");


        conf.set("hbase.master.kerberos.principal", "hbase/bigdata-m-001.bigdata.com@BIGDATA.COM");

        conf.set("hbase.regionserver.kerberos.principal", "hbase/_HOST@BIGDATA.COM");

        UserGroupInformation.setConfiguration(conf);
        connection = ConnectionFactory.createConnection(conf);
        try {
            UserGroupInformation.loginUserFromKeytab("hbase@BIGDATA.COM", "/keytab/hbase.keytab");

        }
        catch (IOException e) {
            logger.error("HBase namespace create fail due to: " + e.getLocalizedMessage());
            e.printStackTrace();
        }
        //子串包含
        String[] qualifiers=new String[]{args[2]};//列名称
        int num=new Integer(args[4]);
        rowFilterSubString(
                conf,
                args[0], //表名称
                args[1], //列簇名称
                qualifiers,//列的合集
                args[3], //包含的内容
                CompareOp.EQUAL,
                num);

        Close.CloserConn(connection);


    }



    //基于行键过滤器
    public static void rowFilterSubString(Configuration conf,
                                          String tablename,
                                          String cfName,
                                          String[] qualifiers,
                                          String substr,
                                          CompareOp operator,
                                          int num){


        try{

            System.out.println("================子串过滤器====================");
            hTable = new HTable(conf, tablename.getBytes());
            Scan scan = new Scan();

            for(String name:qualifiers){

                scan.addColumn(Bytes.toBytes(cfName),Bytes.toBytes(name));
            }

            Filter filter = new RowFilter(operator,new SubstringComparator(substr));

            scan.setCaching(num);

            scan.setFilter(filter);

            ResultScanner scanner = hTable.getScanner(scan);

            for (Result result : scanner){
                for (Cell cell:result.rawCells()){
                    System.out.println("Cell: "+cell+", Value: "+Bytes.toString(cell.getValueArray(),cell.getValueLength()));
                }
            }

            //resultlog(scanner);

            Close.CloseScanner(scanner);
            Close.CloseTable(hTable);



        }catch (IOException e){
            e.printStackTrace();
        }



    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值