Como faço uma chamada assíncrona para o Hive em Java?
Eu gostaria de executar uma consulta Hive no servidor de maneira assíncrona. A consulta do Hive provavelmente levará muito tempo para ser concluída, portanto, prefiro não bloquear a chamada. Atualmente, estou usando o Thirft para fazer uma chamada de bloqueio (blocos em client.execute ()), mas não vi um exemplo de como fazer uma chamada sem bloqueio. Aqui está o código de bloqueio:
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();
Faltam blocos try / catch no código acima para mantê-lo curto.
Alguém tem alguma idéia de como fazer uma chamada assíncrona? O Hive / Thrift pode apoiá-lo? Existe uma maneira melhor?
Obrigado!