使用java HBase API查询 小bug记录

本文详细介绍了在使用 HBase API 进行查询时的关键设置,包括如何通过 `setBatch`、`setCaching` 和 `setCacheBlocks` 方法优化查询效率。特别强调了在 MapReduce 等场景下合理设置这些参数的重要性,以确保查询结果的一致性和减少 RPC 调用次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java HBase API查询时代码部分如下:

         Scan scan = new Scan();
        //scan.setCaching(1);   	
        scan.setStartRow(QueryUtils.byteArray(Bytes.toBytes(indexCol),Bytes.toBytes(startRow),Bytes.toBytes(keyStartZero)));
        scan.setStopRow(QueryUtils.byteArray(Bytes.toBytes(indexCol),Bytes.toBytes(endRow),Bytes.toBytes(keyEndMax)));
       <strong> <span style="color:#cc0000;">scan.setBatch(1);</span></strong>
        scan.addFamily(Bytes.toBytes(hbaseFamily));
        LOGGER.info("[XdrIndexScanTask]inner process!");
        try{
           ResultScanner rs = table.getScanner(scan);             
           if (null != rs) {
              for (Result r : rs) {                  
                for (Cell cell : r.rawCells()) {                           
                    String out = new String(CellUtil.cloneValue(cell));                                                          Map<String, Object> valueMap = JSON.parseObject(out);
                    for (String fileName : valueMap.keySet()) {
                        List<Long> resultList = (List<Long>) valueMap.get(fileName);
                        if(null!=resultList)
                        {                       	                
                             //如果仅仅以时间为查询条件,查询结果不会存在交集。                              
                             List<List<Long>> resultLists = resultMap.get(fileName);
要注意其中标红的一行代码,查询HBase 使用scan的时候如果不设置 setBatch,将会导致每次scan出来的结果数目不一致。

关于scan的其他设置有如下:

      public void setBatch(int batch) :

               为设置获取记录的列个数,默认无限制,也就是返回所有的列

     public void setCaching(int caching):

                每次从服务器端读取的行数,默认为配置文件中设置的值

     public void setCacheBlocks(boolean cacheBlocks):

                为是否缓存块,默认缓存,我们分内存,缓存和磁盘,三种方式,一般数据的读取为内存->缓存->磁盘,当MR的时候为非热点数据,因此不需要缓存

因此在MR的时候最好设置如下:

scan.setCacheBlocks(false);
scan.setCaching(200);//大了占内存,但是rpc少
scan.setBatch(6);//你需要的列
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值