首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Java中异步调用Hive?

如何在Java中异步调用Hive?
EN

Stack Overflow用户
提问于 2010-02-02 10:01:54
回答 6查看 4.7K关注 0票数 3

我想以异步方式在服务器上执行配置单元查询。配置单元查询可能需要很长时间才能完成,因此我不希望阻塞调用。我目前正在使用Thirft进行阻塞调用(client.execute()上的阻塞),但我还没有看到如何进行非阻塞调用的示例。下面是阻塞代码:

代码语言:javascript
运行
复制
        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能支持它吗?有没有更好的方法?

谢谢!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-02-13 07:03:40

在与Hive邮件列表交谈后,Hive不支持使用Thirft的异步调用。

票数 1
EN

Stack Overflow用户

发布于 2010-02-23 00:18:44

AFAIK,在编写本文时,Thrift不生成异步客户端。正如此链接here (搜索“异步”的文本)所解释的原因是,Thrift是为假定延迟较低的数据中心设计的。

不幸的是,正如你所知道的,调用和结果之间的延迟并不总是由网络造成的,而是由执行的逻辑造成的!我们在从Java应用服务器调用Cassandra数据库时遇到了这个问题,我们希望限制总线程数。

摘要:目前,您所能做的就是确保您有足够的资源来处理所需数量的阻塞并发线程,并等待更有效的实现。

票数 2
EN

Stack Overflow用户

发布于 2012-01-10 21:05:39

在安装了这个补丁后,现在可以在Java thrift客户机中进行异步调用了:https://issues.apache.org/jira/browse/THRIFT-768

使用新的thrift生成async java客户端,并按如下方式初始化客户端:

代码语言:javascript
运行
复制
TNonblockingTransport transport = new TNonblockingSocket("127.0.0.1", 9160);
TAsyncClientManager clientManager = new TAsyncClientManager();
TProtocolFactory protocolFactory = new TBinaryProtocol.Factory();
Hive.AsyncClient client = new Hive.AsyncClient(protocolFactory, clientManager, transport);

现在您可以在此客户端上执行方法,就像在同步接口上一样。唯一的变化是所有的方法都有一个额外的回调参数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2181455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档