Hbase scan 速度如何提升

myc_315191545 2018-07-05 07:04:14
现有一list,里面放的是20位的string ,要求查询rowkey是以list中的id为前缀的所有数据。
我的代码如下

Table table = hbaseConnection.getTable(TableName.valueOf(BigDataConstant.HBASE_YHPH_TABLE_NAME));
Scan scan = new Scan();
ResultScanner resultScanner;
String column;
String columnChild;
String columnValue;
String value;

List<Filter> filterlist = new ArrayList<>();
for (String id : idList) {
filterlist.add(new PrefixFilter(id.getBytes()));
}
Filter filter = new FilterList(FilterList.Operator.MUST_PASS_ALL, filterlist);
// 模糊匹配 rowkey
scan.setFilter(filter);
scan.setCaching(500);
// scan.addFamily(HbaseColumnEnum.EMR_DATA.getName().getBytes());
// scan.addFamily(HbaseColumnEnum.LAB_REPORT.getName().getBytes());
scan.addColumn("a".getBytes(),"aa".getBytes());
scan.addColumn("b".getBytes(),"bb".getBytes());
scan.setBatch(2);
scan.setCacheBlocks(false);
LOGGER.debug("Start:[getScanner] ");
resultScanner = table.getScanner(scan);
LOGGER.debug("End:[getScanner] ");

LOGGER.debug("Start:[cycle resultScanner] ");

for (Result rs = resultScanner.next(); rs != null; rs=resultScanner.next()) {
for (Cell cell : rs.listCells()) {
//...
}
}

// Result[] rsList = resultScanner.next(1000);
// for (Result rs:rsList)
// {
// //...
// }

resultScanner.close();
table.close();
LOGGER.debug("End:[cycle resultScanner]");


现在查询耗时差不多要10-15秒
查询出来的结构大概在500条,数据库里数据》2000w
1、这要如何优化?
2、PrefixFilter做的是全盘扫描吗?
...全文
985 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
DarxWu 2018-08-28
  • 打赏
  • 举报
回复
过滤器不会加快多少速度,只是减少了网络传输
pucheung 2018-08-23
  • 打赏
  • 举报
回复
scan.setBatch(2); 不清楚你的每一行有多少列,目前看来batch值偏小,导致多次rpc
kxiaozhuk 2018-07-06
  • 打赏
  • 举报
回复
最好用startRow 和StopRow来scan

20,808

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧