Возможно ли выполнить запрос асинхронно на сервере куста?Выполнение запроса асинхронного куста: OperationHandle очищается на стороне сервера, как только клиент инициатора запроса отключается
Для, например, как я могу/Можно ли сделать что-то подобное из Client-
QueryHandle handle = executeAsyncQuery(hiveQuery);
Status status = handle.checkStatus();
if(status.isCompleted()) {
QueryResult result = handle.fetchResult();
}
я также имел взглянуть на How do I make an async call to Hive in Java?. Но не помогло. Ответы были в основном вокруг бережливых клиентов с аргументом обратного вызова.
Любая помощь будет оценена по достоинству. Благодаря!
[EDIT 1]
Я прошел через HiveConnection.java в улье JDBC. По умолчанию hive-jdbc использует API-интерфейс async thrift. Следовательно, он отправляет запрос и опросы для наборов результатов (посмотрите на HiveStatement.java). Теперь я могу написать кусок кода, который является чисто не блокирующим. Но проблема в том, что как только клиент отключит отпечаток стопы, запрос будет потерян.
Client 1
final TCLIService.Client client = new TCLIService.Client(createBinaryTransport(host, port, loginTimeout, sessConf, false)); // from HiveConnection.java
TSessionHandle sessionHandle = openSession(client) // from HiveConnection.java
TExecuteStatementReq execReq = new TExecuteStatementReq(sessionHandle, sql);
execReq.setRunAsync(true);
execReq.setConfOverlay(sessConf);
final TGetOperationStatusReq handle = client.ExecuteStatement(execReq)
writeHandleToFile("~/handle", handle)
Client 2
final TGetOperationStatusReq handle = readHandleFromFile("~/handle")
final TCLIService.Client client = new TCLIService.Client(createBinaryTransport(host, port, loginTimeout, sessConf, false));
while (true) {
System.out.println(client.GetOperationStatus(handle).getOperationState());
Thread.sleep(1000);
}
Client 2 поддерживает печать FINISHED_STATE, пока клиент 1 жив. Но если процесс клиента 1 завершается или убивается, клиент 2 начинает печатать нуль, что означает, что hiveserver2 очищает ресурсы, как только клиент отключается.
Возможно ли настроить hiveserver2 для настройки этого процесса очистки в зависимости от времени или чего-то еще?
Спасибо!
Из любопытства, что вы ожидаете делать во время выполнения запроса «в фоновом режиме»? Получить журналы, как и Beeline (с V0.14)? –
В моем случае пользователь должен подключиться к веб-службе, которая запрашивает улей. Если веб-служба может просто поместить дескриптор запроса в некоторый общий хранилище, он удаляет зависимость веб-службы, чтобы оставаться в живых, пока запрос не завершится. Другими словами, в среде с балансировкой нагрузки, даже если экземпляр веб-службы опускается, другой экземпляр может извлекать результаты через дескриптор, хранящийся в общем хранилище. – amrk7