我有一个在端口10000上运行的hiveserver(hiveserver2)。 如果我运行命令:
netstat -nl | grep 10000
我明白了:
tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN
所以服务器已启动并正在运行。
我的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()处冻结,并且没有更进一步。它也没有抛出任何例外。 我也尝试过禁用身份验证,但这对于每个线程都没有帮助 Requests hang when using Hiveserver2 Thrift Java client
如果我通过JDBC连接到同一主机,它就可以工作。
此外,如果我启动HiveServer(而不是hiveserver2),它的工作原理就像hiveserver2一样可疑。
答案 0 :(得分:1)
嗯,没有错误输出来指导我们,可能有几件事。
我设置Hive2服务器已经有一段时间了,但是,您可能希望使用hive.server2.thrift.bind.host属性在hive-site.xml中定义IP地址(或主机)。 / p>
如果将上面的属性设置为“localhost”,则需要确保将/ etc / hosts文件设置为正确解析,如果它位于另一台计算机上并使用名称,则同样如此。我建议使用IP地址进行测试,然后转到名称。
要求提供更多信息的评论是一个很好的评论,但这里没有太多内容。您使用的是什么版本的Hive2?什么是Hadoop发行版?根据答案的不同,会影响您的解决方案。
答案 1 :(得分:1)
检查您是否已禁用IPv6,或者在您的环境设置中确保将其添加到您的Java选项中:
-Djava.net.preferIPv4Stack=true
对于第一个,您应该在/etc/sysctl.conf
文件中设置此参数:
#disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
重新启动后检查是否已禁用:
cat /proc/sys/net/ipv6/conf/all/disable_ipv6
对于第二个,您可以在hadoop-env.sh
export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true
或在.bashrc
文件中:
alias java="java -Djava.net.preferIPv4Stack=true"