我已经能够连接到用创建的hiveserver(1)
hive --service hiveserver -v -p 10001
使用以下java:
TSocket transport = new TSocket("hive.example.com", 10001);
transport.setTimeout(999999999);
TBinaryProtocol protocol = new TBinaryProtocol(transport);
Client client = new ThriftHive.Client(protocol);
transport.open();
client.execute("SHOW TABLES");
System.out.println(client.fetchOne());
transport.close();
hiveserver2是否存在一个等价物,如果存在,它是什么?我发现最好的是一个设计方案,我还没有找到任何文件。看起来cloudera为python设置了一些东西
或者,从java运行任意配置单元查询的最佳方法是什么?如果相关的话,我运行的是hortonworks数据平台1.2
3条答案
按热度按时间0ejtzxu11#
经过一番搜索,我使用hortonworks data platform1.2中的cli\u service.thrift为hiveserver2生成了一个java-thrift服务器和客户端。如果有人感兴趣,你可以在这个帐篷里找到。一旦我这样做并导入了结果文件,我的ide就让我知道hiveserver2客户机api就在我一直使用的jar中。但不幸的是,我在apache配置单元jars中找不到它,所以在maven中,将这个添加到pom.xml并不能完全解决这个问题。
我将hdp1.2版本的hiveserver的0.10.0.21版本添加到了我的存储库中,并引用了它。然后我手动将它的所有依赖项添加到pom.xml中,包括来自hdp的其他几个0.10.0.21配置单元jar。由于这个过程与我的答案有些相切,除非有人提出要求,否则我不会详细讨论这个问题。
实际上,让api工作完全是另一回事。通过浏览thrift生成的几十个文件、查看cli\u service.thrift和apache jdbc实现(这是我所知道的针对hiveserver2 thrift api编写的唯一示例),我得出了以下代码,这几乎是hiveserver(1)示例的直接翻译:
这是针对以下启动的hiveserver2服务器运行的:
不幸的是,我得到的行为与我尝试对hiveserver2运行hiveserver(1)客户机时相同。
transport.open()
工作,但第一个请求(在hiverserver2的情况下)client.OpenSession()
与hiveserver相反(1)client.execute()
)挂起。wireshark显示tcp段已确认。没有控制台输出或任何写入日志的内容,直到我杀死我的客户端或请求超时,然后我得到:似乎有人在python客户机上遇到了类似的问题。我缺乏的声誉,张贴一个链接,所以如果你想看到他们的(未解决的)问题谷歌
hiveserver2 thrift client python grokbase
既然不起作用,这只是我问题的部分答案。然而,现在我有了api,我将提出一个新的问题来让它工作。我也不能链接到那个,所以如果你想在我的用户历史中看到后续的查看。mqkwyuun2#
服务器进程需要来自客户端的sasl握手(这就是为什么可以在堆栈跟踪中看到tsaslservertransport)。使用tsaslclienttransport作为tsocket连接的 Package 器-您还需要将适当配置的saslclient示例传递给构造函数。或者,可以修改hive-site.xml以关闭sasl身份验证。
rryofs0p3#
您考虑过使用hiveclient jdbc接口吗?