Я хотел бы выполнить запрос 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 это поддержать? Есть ли лучший способ?
Спасибо!