We're using hbase 0.90.0 here, and I'm seeing a curious behavior with my scans.

I have some code that does a scan over a table, and for each row
returned some work to verify the data...

I set the scan up like so :
  byte[] family = Bytes.toBytes("mytable");
  Scan scan = new Scan();
  scan.setCaching(2000);
  scan.addFamily(family);

and then scan using a fairly normal looking loop:

  ResultScanner scanner = table.getScanner(scan);
  for (Result userInfoResult : scanner) {
      // do some work that takes about half a second
  }

After this code runs for 60 seconds, I get the exception below:

Exception in thread "main" java.lang.RuntimeException:
org.apache.hadoop.hbase.client.ScannerTimeoutException: 78850ms passed
since the last invocation, timeout is currently set to 60000
        at 
org.apache.hadoop.hbase.client.HTable$ClientScanner$1.hasNext(HTable.java:1213)
        at 
cnwk.tridentp.firehose.ShowAssetMatchStatsMain.scanForProperties(ShowAssetMatchStatsMain.java:82)
        at 
cnwk.tridentp.firehose.ShowAssetMatchStatsMain.generateAssetMatchStats(ShowAssetMatchStatsMain.java:56)
        at 
cnwk.tridentp.firehose.ShowAssetMatchStatsMain.main(ShowAssetMatchStatsMain.java:33)
Caused by: org.apache.hadoop.hbase.client.ScannerTimeoutException:
78850ms passed since the last invocation, timeout is currently set to
60000
        at 
org.apache.hadoop.hbase.client.HTable$ClientScanner.next(HTable.java:1114)
        at 
org.apache.hadoop.hbase.client.HTable$ClientScanner$1.hasNext(HTable.java:1210)
        ... 3 more
Caused by: org.apache.hadoop.hbase.UnknownScannerException:
org.apache.hadoop.hbase.UnknownScannerException: Name:
-3447615741604242626
        at 
org.apache.hadoop.hbase.regionserver.HRegionServer.next(HRegionServer.java:1793)
        at sun.reflect.GeneratedMethodAccessor31.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.hadoop.hbase.ipc.HBaseRPC$Server.call(HBaseRPC.java:570)
        at 
org.apache.hadoop.hbase.ipc.HBaseServer$Handler.run(HBaseServer.java:1036)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at 
org.apache.hadoop.hbase.RemoteExceptionHandler.decodeRemoteException(RemoteExceptionHandler.java:96)
        at 
org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:83)
        at 
org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:38)
        at 
org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getRegionServerWithRetries(HConnectionManager.java:999)
        at 
org.apache.hadoop.hbase.client.HTable$ClientScanner.next(HTable.java:1100)
        ... 4 more


The message seems to indicate that I haven't called scanner.next() in
a long time (> 60 seconds), which isn't true, scanner.next() is being
called more than once per second.

However, if I disable caching (comment out the scan.setCaching() line
above), or set caching to a smaller value (1000, instead of 2000), the
code runs as expected.

I'm guessing that a cache-hit during my scan isn't resetting the
timeout that leads to a ScannerTimeoutException, but that's just a
guess...

Is this expected behavior?


...joe

Reply via email to