Description
When issuing long running jdbc queries it is quite plausibe that due to stateful firewall rules connections may be dropped due to inactivity. Having the ability specify this as a jdbc property would help alleviate this issue when firewall connection inactivity timeouts are greater than the tcp keepalive time (default of 2 hrs).
As a temporary workaround, one can use reflection on the jdbc connection to set this option:
public static Connection getHiveConnection() { Connection hiveConnection = // create connection try { Socket socket = getConnectionSocket( hiveConnection ); socket.setKeepAlive( true ); } catch( SocketException e ) { throw new RuntimeException( e ); } return hiveConnection; } private static Socket getConnectionSocket( Connection connection ) { final Field fields[] = connection.getClass().getDeclaredFields(); for( int i = 0; i < fields.length; ++i ) { if( "transport".equals( fields[i].getName() ) ) { try { fields[i].setAccessible( true ); TSocket transport = (TSocket) fields[i].get( connection ); return transport.getSocket(); } catch( Exception e ) { throw new RuntimeException( e ); } } } return null; }
Attachments
Issue Links
- relates to
-
HIVE-8829 Upgrade to Thrift 0.9.2
- Resolved