AnsweredAssumed Answered

GC overhead limit exceeded during a batch get

Question asked by ajay_n on Mar 18, 2013
Latest reply on Mar 19, 2013 by Ted Dunning
I am doing multiple batch Gets to an HBase table in my reducer. A few of the reducer keys have a large number of values and they cause many batch Gets to be sent sometimes resulting in the exceptions below. The batch size is 1000. I could try bumping up the heap size etc. but I wanted to make sure that it is okay to repeatedly call a batch get on the same HTable instance.


    java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.OutOfMemoryError: GC overhead limit exceeded
             at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
             at java.util.concurrent.FutureTask.get(FutureTask.java:83)
             at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatchCallback(HConnectionManager.java:1544)
             at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatch(HConnectionManager.java:1396)
             at org.apache.hadoop.hbase.client.HTable.batch(HTable.java:693)

[snipped]
 
      Caused by: java.lang.RuntimeException: java.lang.OutOfMemoryError: GC overhead limit exceeded
         at org.apache.hadoop.hbase.client.ServerCallable.withoutRetries(ServerCallable.java:216)
         at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$3.call(HConnectionManager.java:1380)
         at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$3.call(HConnectionManager.java:1368)

[snipped]
  
        Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
         at java.util.TreeMap.keyIterator(TreeMap.java:1003)
         at java.util.TreeMap$KeySet.iterator(TreeMap.java:1016)
         at java.util.TreeSet.iterator(TreeSet.java:164)
         at org.apache.hadoop.hbase.client.Get.write(Get.java:449)

[snipped]

Outcomes