我有一个hiveserver(hiveserver2)在端口10000上运行。如果我运行命令:
netstat -nl | grep 10000
我得到:
tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN
所以服务器已经启动并运行了。
my hive-site.xml设置:
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
我的代码:
public class ThriftAgent {
private static final String HOST = "localhost";
private static final int PORT = 10000;
public static void main(String[] args) throws Exception {
TSocket transport = new TSocket(HOST, PORT);
transport.open();
TBinaryProtocol protocol = new TBinaryProtocol(transport);
Client client = new ThriftHive.Client(protocol);
client.execute("show tables");
final List<String> results = client.fetchAll();
for (String result : results) {
System.out.println(result);
}
transport.close();
}
}
我尝试过不同的url组合,但它在client.execute()处冻结,不会再进一步。它也不会抛出任何异常。我也尝试过禁用身份验证,但在使用hiveserver2 thrift java客户端时,由于线程请求挂起,这也没有帮助
如果我通过jdbc连接到同一个主机,它就工作了。
另外,如果我启动hiveserver(而不是hiveserver2),它会正常工作,因此hiveserver2有些可疑。
2条答案
按热度按时间kg7wmglp1#
好吧,没有错误输出来指导我们,它可能是几件事。
我已经有一段时间没有设置hive2服务器了,但是,您可能希望使用hive.server2.thrift.bind.host属性在hive-site.xml中定义ip地址(或主机)。
如果您将上面的属性设置为“localhost”,则需要确保/etc/hosts文件已设置为正确解析您,如果它位于另一台计算机上,并且您使用了该名称,则需要执行相同的操作。我建议使用ip地址进行测试,然后转到name。
要求更多信息的评论是一个很好的一个虽然,这里没有太多要去。您使用的是什么版本的hive2?什么hadoop发行版?不同的答案会影响你的解决方案。
niwlg2el2#
检查是否已禁用ipv6或在环境设置中确保将此添加到java选项中:
对于第一个,您应该在
/etc/sysctl.conf
文件:重新启动后,检查是否已禁用:
对于第二个,你可以把这个加进去
hadoop-env.sh
```export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true
alias java="java -Djava.net.preferIPv4Stack=true"