【发布时间】:2017-05-27 08:56:48
【问题描述】:
我编写了一个 Java 应用程序来使用 Spark SQL 在基于 hive 的数据库上执行 SQL 查询。但是,从我的 Java 应用程序通过 JDBC 连接到 Spark SQL 会给我一个 connection denied 错误。我写的一段代码如下:
public static void main(String args[]) {
Class.forName("org.apache.hive.jdbc.HiveDriver");
conn = DriverManager.getConnection("jdbc:hive2://<ip>:10015/default","","");
System.out.println("Connected!");
}
我在Windows 7 的VMWare 工作站内的Centos 7 OS 上使用HDP 2.5。代码从 Eclipse Neon 运行,JDK 8。
我可以通过代码连接到同一 IP 上的 port 10000(用于 Hive)。此外,我尝试建立从 Beeline 到 10000 和 10015 的 JDBC 连接,并且它们都可以正常工作。直线语法是:
!connect jdbc:hive2://127.0.0.1:10015
Java 代码的堆栈跟踪是:
1300 [main] INFO org.apache.hive.jdbc.HiveConnection - Could not open client transport with JDBC Uri: jdbc:hive2://192.168.225.128:10015/default
java.sql.SQLException: Could not open client transport with JDBC Uri: jdbc:hive2://192.168.225.128:10015/default: java.net.ConnectException: Connection refused: connect
at org.apache.hive.jdbc.HiveConnection.openTransport(HiveConnection.java:215)
at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:163)
at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
【问题讨论】:
-
错误提示它没有在端口 10015 上监听,或者至少不在 IP 地址 192.168.225.128 上
-
使用 'netstat' 来验证端口是否在监听。另外,如果beeline能够连接到10015上的服务,那么端口一定是工作的,
-
不,因为您正在连接到 127.0.0.1。端口可以在特定 IP 地址上打开,而在同一主机上的其他 IP 地址上关闭。
-
我应该从防火墙做点什么吗?您认为可能是什么问题?
标签: java apache-spark jdbc hive apache-spark-sql