3 Stimmen

Wie führe ich einen asynchronen Aufruf an Hive in Java durch?

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 !

0voto

Deep Kapadia Punkte 1458

Wir lösen asynchrone Aufrufe aus an AWS Elastic MapReduce . AWS MapReduce kann Hadoop/Hive-Aufträge in Amazons Cloud mit einem Aufruf der AWS MapReduce-Webservices ausführen.

Sie können auch den Status Ihrer Aufträge überwachen und die Ergebnisse von S3 abrufen, sobald der Auftrag abgeschlossen ist.

Da die Aufrufe der Webdienste asynchron erfolgen, werden die anderen Vorgänge nicht blockiert. Wir überwachen den Status unserer Aufträge weiterhin in einem separaten Thread und holen die Ergebnisse ab, wenn der Auftrag abgeschlossen ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X