hbase java Api Scan Limit ----小短文(含分页实现思路)

30 篇文章 16 订阅
10 篇文章 0 订阅
本文介绍了在HBase中实现分页查询的技巧,重点在于发现HBase从1.4.x版本开始支持Limit API。作者通过实验确定1.4.0版本为既能兼容旧代码又有分页功能的最低版本,并提供了使用Java API进行分页查询的示例代码,包括设置startRow和Limit来实现分页。此外,还提到了rowStart和endRow在HBase迁移和断点续传中的应用。
摘要由CSDN通过智能技术生成

注意:Hbase 1.4x以上的API才支持Limit

写之前在国内百度找烂了,没有找到Limit。最后在国外stackOverFlow找到了,说明是版本问题。

然后我就改了2.0,发现是支持的,但是以前的代码就不支持了,而且也得换库。所以我就1个1个的试,看看哪个版本,既能兼容以前的代码也能有这个功能。

最后试出来了,1.4.0开始支持这个方法了。

为了版本不冲突,选取的hbase程序是官方推荐的1.7,pom也是1.7。花了2分钟替换了一下程序和配置。就可以用了。

分页功能实现,startRow与Limit,可完成分页。Hbase默认scan是进行排序的。

如果想取前1w行,则指定startRow,并且limit 10001。可以作为第一页。取末尾最后一个row,作为下一个的startRow。可实现分页。

hbase shell:

由于【rowStart和endRow】的获取速度和你get一样快,固常用于【Hbase迁移】,和更新。用于记录迁移的位置和【断点续传】

javaApi:

pom、和基本配置连接我就不给了,我的另一篇博文有 。传送门

  @Test
    public  void cpNewLibaryToken(){
        //rowkey
        String rowStrat="0";//选取你scan的第一个rowkey的第一个字符

        //hbase 数据获取
        Configuration HBASE_CONF;
        HBASE_CONF = HBaseConfiguration.create();
        HBASE_CONF.set("hbase.zookeeper.property.clientPort", "2181");
        HBASE_CONF.set("hbase.zookeeper.quorum", "192.168.xx.xx");
        HBASE_CONF.set("hbase.master", "192.168.xx.xx:60000");
        HBASE_CONF.set("zookeeper.znode.parent", "/hbase");
        HBASE_CONF.setInt("hbase.hconnection.threads.max", 5);
        HBASE_CONF.setInt("hbase.hconnection.threads.core", 5);
        HBASE_CONF.setLong("hbase.hconnection.threads.keepalivetime", 1000);
        System.out.println("连接hbase");
        try {
            ConnectionFactory.createConnection(HBASE_CONF);
            Connection hbaseConnection = ConnectionFactory.createConnection(HBASE_CONF);
            Table tableRead = hbaseConnection.getTable(TableName.valueOf("0_library_token"));
            System.out.println("开始读取"+rowStrat+"后的1w个rowKey");

            Scan scan = new Scan().withStartRow(rowStrat.getBytes())//这个和低版本略有不同
                .setMaxVersions(99999999).setMaxResultsPerColumnFamily(10)
                .addColumn(Bytes.toBytes("F"), Bytes.toBytes("F"))
                .setLimit(10);//这个就是核心,对应shell中的limit,数字代表startRow后面的条数


            ResultScanner scanner = tableRead.getScanner(scan);
            for(Result rs:scanner){

                String row = Bytes.toString(rs.getRow());
                System.out.println(row);
            }
        }
        catch (Exception  e){
            e.printStackTrace();
            System.out.println("Hbase进行"+rowStrat+"这后面的1w个rowkey时,失败");
            System.out.println("进行失败脏数据删除中-----------");
            //删除代码(我在demo中删除了,这个根据自己的业务来)
            System.out.println("删除完成---------");


        }
    }

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值