2015-11-30 2 views
0

Я использую hive jdbc 1.0 в своем приложении java для создания соединения с сервером улья и выполнения запроса. Я хочу установить тайм-аут соединения в режиме ожидания с Java-кодом. Например, пользователь сначала создает соединение с улей, и если соединение с улей остается бездействующим в течение следующих 10 минут, то этот объект соединения должен быть истек. Если пользователь использует тот же объект соединения через 10 минут для выполнения запроса, то hive jdbc должен выдать ошибку. Не могли бы вы рассказать мне, как достичь этого с помощью java-кода.Как установить idle Hive jdbc соединение из java-кода с помощью hive jdbc

Я знаю, что в улье есть свойство hive.server2.idle.session.timeout, но я не знаю, требуется ли это правильное свойство, которое необходимо установить из java-кода или есть другое свойство. Я попытался установить это свойство в строке подключения jdbc, но это не сработало.

try { 
    Class.forName("org.apache.hive.jdbc.HiveDriver"); 
} catch (ClassNotFoundException e) { 
    LOG.error(ExceptionUtils.getStackTrace(e)); 
} 

String jdbcurl = "jdbc:hive2://localhost:10000/idw?hive.server2.idle.session.timeout=1000ms"; 
Connection con; 
con = DriverManager.getConnection(jdbcurl,"root",""); 

Thread.sleep(3000); 

Теперь ниже я использую объект соединения, улей JDBC должен бросить ошибку здесь, как я использовал объект подключения через 3000 мс, но я установить период ожидания, как 1000ms но улья JDBC не бросил ошибку

ResultSet rs = con.createStatement().executeQuery("select * from idw.emp"); 

Нужна помощь по этому вопросу.

ответ

0

hive.server2.idle.session.timeout заставляет сеанс прекращаться, если к нему не обращаются в течение указанной продолжительности. Тем не менее, hive.server2.idle.session.timeout необходимо указать с hive.server2.session.check.interval, установленным в положительное значение. в основном, нам нужно указать количество проверок сеанса в интервале таймаута, чтобы заставить сеанс закрываться.

Подробнее здесь можно проверить https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties#ConfigurationProperties-hive.server2.session.check.interval

+0

Я использовал оба параметра конфигурации в строке подключения. Это не сработало. jdbc: hive2: //192.168.145.182: 10000 /; hive.server2.idle.session.timeout = 5000ms; hive.server2.session.check.interval = 4000ms –

+0

@ReenaUpadhyay вы нашли для этого какое-то решение? Я прочитал эту ссылку, и она кажется полезной, но я еще не пробовал ее. Http://www.ericlin.me/how-to-configue-session-timeout-in-hive Кроме того, в моем случае мое искровое приложение убит после некоторого неопределенного интервала бездействия без какой-либо индикации журнала, и как только он будет запущен снова, мой сервер jboss не сможет снова подключиться к нему –

-1

Вы смотрите на проблему неправильно. Эти свойства не набор в URL, как описано в Hive AdminManual ...

В экосистеме Hadoop, сервер по умолчанию установлены в файлах конфигурации XML - в этом случае /etc/hive/conf/hive-site.xml и/или hiveserver2-site.xml

Как только ваша сессия открыта, вы можете установить пользовательские значения с оператором set <prop>=<value>(несколько похож на Oracle ALTER SESSION).

Предостережение: некоторые свойства определяются как «окончательные» в файлах конфигурации и не могут быть переопределены. Если у вас есть сомнения, обратитесь к администратору Hadoop.