Hiveserver2没有响应

时间:2014-11-11 14:20:09

标签: java hadoop hive thrift

我有一个在端口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一样可疑。

2 个答案:

答案 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"