我编写了一个Java应用程序,使用Spark SQL对基于hive的数据库执行SQL查询。但是,从我的 Java 应用程序通过 JDBC 连接到 Spark SQL 会给我一个连接被拒绝的错误。我编写的代码如下:
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)。此外,我尝试将 JDBC 从 Beeline 连接到 10000
和 10015
,并且它们都可以正常工作。直线语法为:
!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)
我已经设法解决了它,解决方案相当简单。您需要启动Spark Thrift Servers才能完成此操作。
使用 Ambari Web UI 启动 Spark Thrift Server:
只需前往安巴里->火花。在右上角,您可以看到选项。单击它并从那里启动Spark Thrift服务器。
如果在 Web UI 中看不到 Spark Thrift 服务器,请转到 SPARK_HOME/sbin 并键入:
./start-thriftserver.sh --hiveconf hive.server2.thrift.port=10015
在服务器启动后等待一两分钟,您可以成功建立 JDBC 连接。
您是否将 Hive 元数据存储在 mysql 中?也许 mysql 服务器绑定到本地主机。尝试查看/etc/mysql/mysql.conf.d/mysqld.cnf
,并找到以下行:
bind-address = 127.0.0.1
删除它,然后重新启动 MySQL 服务器。