hiveserver2没有响应

3qpi33ja  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(549)

我有一个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有些可疑。

kg7wmglp

kg7wmglp1#

好吧,没有错误输出来指导我们,它可能是几件事。
我已经有一段时间没有设置hive2服务器了,但是,您可能希望使用hive.server2.thrift.bind.host属性在hive-site.xml中定义ip地址(或主机)。
如果您将上面的属性设置为“localhost”,则需要确保/etc/hosts文件已设置为正确解析您,如果它位于另一台计算机上,并且您使用了该名称,则需要执行相同的操作。我建议使用ip地址进行测试,然后转到name。
要求更多信息的评论是一个很好的一个虽然,这里没有太多要去。您使用的是什么版本的hive2?什么hadoop发行版?不同的答案会影响你的解决方案。

niwlg2el

niwlg2el2#

检查是否已禁用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"

相关问题