我想以异步方式在服务器上执行 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 可以支持吗?有没有更好的办法?
谢谢!