写之前在国内百度找烂了,没有找到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("删除完成---------"); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)