Я хотел бы выполнить запрос Hive на сервере асинхронно. Запрос Hive, вероятно, займет много времени, поэтому я бы предпочел не блокировать вызов. В настоящее время я использую Thirft для выполнения блокирующего вызова (блокирует client.execute()), но я не видел примера того, как сделать неблокирующий вызов. Вот код блокировки:
TSocket transport = new TSocket("hive.example.com", 10000);
transport.setTimeout(999999999);
TBinaryProtocol protocol = new TBinaryProtocol(transport);
Client client = new ThriftHive.Client(protocol);
transport.open();
client.execute(hql); // Omitted HQL
List<String> rows;
while ((rows = client.fetchN(1000)) != null) {
for (String row : rows) {
// Do stuff with row
}
}
transport.close();
В приведенном выше коде отсутствуют блоки try/catch, чтобы сделать его коротким.
У кого-нибудь есть идеи, как сделать асинхронный вызов? Может ли Hive/Thrift поддерживать это? Есть ли способ лучше?
Спасибо!