通过java应用程序连接到spark sql jdbc失败

qltillow  于 2021-06-28  发布在  Hive
关注(0)|答案(2)|浏览(515)

我编写了一个java应用程序,使用sparksql在基于配置单元的数据库上执行sql查询。但是,从java应用程序通过jdbc连接sparksql会导致连接被拒绝错误。我写的代码如下:

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!");
}

我正在使用 HDP 2.5Centos 7 OS 内部 VMWare 工作站打开 Windows 7 . 代码正在eclipse neon上运行, JDK 8 .
我可以连接到 port 10000 (对于配置单元)在代码的同一ip上。另外,我还尝试将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)
46scxncf

46scxncf1#

您是否将配置单元元数据存储在mysql中?也许mysql服务器绑定到localhost。尝试查看 /etc/mysql/mysql.conf.d/mysqld.cnf ,并找到此行:

bind-address = 127.0.0.1

删除它,然后重新启动mysql服务器。

gijlo24d

gijlo24d2#

我已经设法解决了这个问题,解决办法相当简单。你需要启动spark thrift服务器来实现这一点。

使用ambari web ui启动spark thrift服务器:

去ambari->spark。在右上角,您可以看到选项。点击它并从那里启动spark thrift服务器。
如果在web ui中看不到spark thrift服务器,请转到spark\u home/sbin并键入:

./start-thriftserver.sh --hiveconf hive.server2.thrift.port=10015

在服务器启动后等待一两分钟,就可以成功地建立jdbc连接。

相关问题