サーバー上で非同期に 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 はそれをサポートできますか? より良い方法はありますか?
ありがとう!