Ich möchte eine Hive-Abfrage auf dem Server asynchron ausführen. Die Hive-Abfrage wird wahrscheinlich eine lange Zeit in Anspruch nehmen, so dass ich es vorziehen würde, den Aufruf nicht zu blockieren. Ich verwende derzeit Thirft, um einen blockierenden Aufruf zu machen (blockiert bei client.execute()), aber ich habe kein Beispiel dafür gesehen, wie man einen nicht-blockierenden Aufruf macht. Hier ist der blockierende Code:
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();
Im obigen Code fehlen try/catch-Blöcke, um ihn kurz zu halten.
Hat jemand eine Idee, wie man einen asynchronen Aufruf zu tun? Kann Hive/Thrift das unterstützen? Gibt es einen besseren Weg?
Merci !