title: SocketTimeoutException issue from HBase Client
body: <p>We are working on a scenario where we need to check the existence of the record before insertion. If the record already exists we dont insert it again. We are doing in batches. First we create a batch of Gets to see the existence of the records we want to insert. This issue is not coming when the table size is less and also it is very intermittent. <strong>What is the recommended batch size for Get</strong>. And <strong>what is best approach to check the existence of the records before inserting</strong>?? Appreciate your responses.. </p>
  
  <p>Here's the stack trace.. </p>
  
  <pre><code>java.util.concurrent.ExecutionException: java.net.SocketTimeoutException: Call to b16-pf-dv-093.abc.com/10.106.8.103:60020 failed on socket timeout exception: java.net.SocketTimeoutException: 60000 millis timeout while waiting for channel to be ready for read. ch : java.nio.channels.SocketChannel[connected local=/10.106.8.133:41903 remote=b16-pf-dv-093.abc.com/10.106.8.103:60020] 
          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:1604) 
          at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatch(HConnectionManager.java:1456) 
          at org.apache.hadoop.hbase.client.HTable.batch(HTable.java:757) 
          at org.apache.hadoop.hbase.client.HTable.get(HTable.java:726) 
          at org.apache.hadoop.hbase.client.HTablePool$PooledHTable.get(HTablePool.java:367) 
          at com.abc.psp.core.metering.util.HBaseClient.get(HBaseClient.java:263) 
          at com.abc.psp.core.metering.dao.MeteringHBaseDAOImpl.addMeteredRecords(MeteringHBaseDAOImpl.java:374) 
          at com.abc.psp.core.metering.dao.MeteringHBaseDAOImpl.addMeteredRecords(MeteringHBaseDAOImpl.java:342) 
          at HBaseTest.main(HBaseTest.java:32) 
  Caused by: java.net.SocketTimeoutException: Call to b16-pf-dv-093.abc.com/10.106.8.103:60020 failed on socket timeout exception: java.net.SocketTimeoutException: 60000 millis timeout while waiting for channel to be ready for read. ch : java.nio.channels.SocketChannel[connected local=/10.106.8.133:41903 remote=b16-pf-dv-093.abc.com/10.106.8.103:60020] 
          at org.apache.hadoop.hbase.ipc.HBaseClient.wrapException(HBaseClient.java:1026) 
          at org.apache.hadoop.hbase.ipc.HBaseClient.call(HBaseClient.java:999) 
          at org.apache.hadoop.hbase.ipc.WritableRpcEngine$Invoker.invoke(WritableRpcEngine.java:86) 
          at $Proxy6.multi(Unknown Source) 
          at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$3$1.call(HConnectionManager.java:1433) 
          at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$3$1.call(HConnectionManager.java:1431) 
          at org.apache.hadoop.hbase.client.ServerCallable.withoutRetries(ServerCallable.java:215) 
          at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$3.call(HConnectionManager.java:1440) 
          at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$3.call(HConnectionManager.java:1428) 
          at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
          at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
          at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
          at java.lang.Thread.run(Thread.java:662) 
  Caused by: java.net.SocketTimeoutException: 60000 millis timeout while waiting for channel to be ready for read. ch : java.nio.channels.SocketChannel[connected local=/10.106.8.133:41903 remote=b16-pf-dv-093.abc.com/10.106.8.103:60020] 
          at org.apache.hadoop.net.SocketIOWithTimeout.doIO(SocketIOWithTimeout.java:164) 
          at org.apache.hadoop.net.SocketInputStream.read(SocketInputStream.java:155) 
          at org.apache.hadoop.net.SocketInputStream.read(SocketInputStream.java:128) 
          at java.io.FilterInputStream.read(FilterInputStream.java:116) 
          at org.apache.hadoop.hbase.ipc.HBaseClient$Connection$PingInputStream.read(HBaseClient.java:373) 
          at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) 
          at java.io.BufferedInputStream.read(BufferedInputStream.java:237) 
          at java.io.DataInputStream.readInt(DataInputStream.java:370) 
          at org.apache.hadoop.hbase.ipc.HBaseClient$Connection.receiveResponse(HBaseClient.java:646) 
          at org.apache.hadoop.hbase.ipc.HBaseClient$Connection.run(HBaseClient.java:580)
  </code></pre>