You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@hbase.apache.org by Yang Zhang <zh...@gmail.com> on 2017/12/10 07:05:29 UTC

Some problem about RegionScanner In coprocessor

Hello everyone

         I am using coprocessor in HBase. When I try to Scan a Region using
RegionScanner , It will takes a long time. Even 100 times longer than Scan
from HBase shell. So I believe there must be something wrong.

        What's more, HBase will also give no response when I try to disable
this table and try to delete.

        My HBase version is 0.98.4,,Table row number is 500000,all data is
in one region.I do this in preScannerOpen hooks.

        My code is below,Anybody can help? Thanks very much!

private void testScan(String regionInfo, RegionCoprocessorEnvironment
env,RegionScanner regionScanner){
    IndexTree indexTree = new JavaTreeMap(new Node());
    regionIndexMap.put(regionInfo, indexTree);
    Scan scan = new Scan();
    scan.setFilter(new FirstKeyOnlyFilter());

    long totalNum = 0;
    long start = System.currentTimeMillis();

    try {
        RegionScanner rs = env.getRegion().getScanner(scan);
        List<Cell> values = new LinkedList<>();
        while (rs.next(values)){
            totalNum++;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    long end = System.currentTimeMillis();
    logger.error("==== TestScanAllRegion Cost :"+(end-start)+"
RegionNum :"+totalNum);
}

Re: Some problem about RegionScanner In coprocessor

Posted by Yang Zhang <zh...@gmail.com>.
Thank you very much, It works!, and sorry for my stupid code.

2017-12-10 18:26 GMT+08:00 张铎(Duo Zhang) <pa...@gmail.com>:

> You need to clear the values every time before you call rs.next otherwise
> the list will become larger and larger.
>
> 2017-12-10 15:05 GMT+08:00 Yang Zhang <zh...@gmail.com>:
>
> > Hello everyone
> >
> >          I am using coprocessor in HBase. When I try to Scan a Region
> using
> > RegionScanner , It will takes a long time. Even 100 times longer than
> Scan
> > from HBase shell. So I believe there must be something wrong.
> >
> >         What's more, HBase will also give no response when I try to
> disable
> > this table and try to delete.
> >
> >         My HBase version is 0.98.4,,Table row number is 500000,all data
> is
> > in one region.I do this in preScannerOpen hooks.
> >
> >         My code is below,Anybody can help? Thanks very much!
> >
> > private void testScan(String regionInfo, RegionCoprocessorEnvironment
> > env,RegionScanner regionScanner){
> >     IndexTree indexTree = new JavaTreeMap(new Node());
> >     regionIndexMap.put(regionInfo, indexTree);
> >     Scan scan = new Scan();
> >     scan.setFilter(new FirstKeyOnlyFilter());
> >
> >     long totalNum = 0;
> >     long start = System.currentTimeMillis();
> >
> >     try {
> >         RegionScanner rs = env.getRegion().getScanner(scan);
> >         List<Cell> values = new LinkedList<>();
> >         while (rs.next(values)){
> >             totalNum++;
> >         }
> >     } catch (IOException e) {
> >         e.printStackTrace();
> >     }
> >     long end = System.currentTimeMillis();
> >     logger.error("==== TestScanAllRegion Cost :"+(end-start)+"
> > RegionNum :"+totalNum);
> > }
> >
>

Re: Some problem about RegionScanner In coprocessor

Posted by "张铎 (Duo Zhang)" <pa...@gmail.com>.
You need to clear the values every time before you call rs.next otherwise
the list will become larger and larger.

2017-12-10 15:05 GMT+08:00 Yang Zhang <zh...@gmail.com>:

> Hello everyone
>
>          I am using coprocessor in HBase. When I try to Scan a Region using
> RegionScanner , It will takes a long time. Even 100 times longer than Scan
> from HBase shell. So I believe there must be something wrong.
>
>         What's more, HBase will also give no response when I try to disable
> this table and try to delete.
>
>         My HBase version is 0.98.4,,Table row number is 500000,all data is
> in one region.I do this in preScannerOpen hooks.
>
>         My code is below,Anybody can help? Thanks very much!
>
> private void testScan(String regionInfo, RegionCoprocessorEnvironment
> env,RegionScanner regionScanner){
>     IndexTree indexTree = new JavaTreeMap(new Node());
>     regionIndexMap.put(regionInfo, indexTree);
>     Scan scan = new Scan();
>     scan.setFilter(new FirstKeyOnlyFilter());
>
>     long totalNum = 0;
>     long start = System.currentTimeMillis();
>
>     try {
>         RegionScanner rs = env.getRegion().getScanner(scan);
>         List<Cell> values = new LinkedList<>();
>         while (rs.next(values)){
>             totalNum++;
>         }
>     } catch (IOException e) {
>         e.printStackTrace();
>     }
>     long end = System.currentTimeMillis();
>     logger.error("==== TestScanAllRegion Cost :"+(end-start)+"
> RegionNum :"+totalNum);
> }
>