Я хотел бы выполнить запрос на улей на сервере асинхронным образом. Запрос на улов, вероятно, займет много времени, поэтому я бы предпочел не блокировать вызов. В настоящее время я использую Thirft, чтобы сделать блокирующий вызов (блоки на client.execute()), но я не видел примера, как сделать неблокирующий вызов. Вот код блокировки:Как сделать асинхронный вызов Hive в Java?
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, чтобы сократить его.
Есть ли у кого-нибудь идеи, как сделать асинхронный вызов? Can Hive/Thrift поддерживает его? Есть ли способ лучше?
Спасибо!
Я действительно мало что знаю о Trrift только сейчас, но не могу ли вы обернуть его в runnable и создать новую тему? – brindy
Да, ясно, что я могу сделать работу самостоятельно, но есть вещи, которые заставляют меня думать, что она уже встроена в Thrift, как TNonblockingSocket. Я не могу найти примеров того, как его использовать, или даже если Hive поддерживает его. –