通过Java应用程序连接到Spark SQL JDBC失败

时间:2017-01-12 09:55:38

标签: java apache-spark jdbc hive apache-spark-sql

我编写了一个Java应用程序,使用Spark SQL在基于配置单元的数据库上执行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!");
}

我在HDP 2.5上的Centos 7 OS工作站内的VMWare上使用Windows 7。代码正在从Eclipse Neon JDK 8运行。

我可以从代码连接到同一IP上的port 10000(用于Hive)。此外,我尝试从直线到1000010015建立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)

2 个答案:

答案 0 :(得分:0)

您是否已将hive元数据存储在mysql中?也许mysql服务器绑定到localhost。尝试查看/etc/mysql/mysql.conf.d/mysqld.cnf,然后找到以下行:

bind-address = 127.0.0.1

将其删除,然后重启mysql服务器。

答案 1 :(得分:0)

我已经设法解决了,解决方案非常简单。您需要启动Spark Thrift Servers才能使其正常工作。

使用Ambari Web UI启动Spark Thrift服务器:

去Ambari - &gt;火花。在右上角,您可以看到选项。单击它并从那里启动Spark Thrift Servers。

如果您在Web UI中没有看到Spark Thrift Servers,请转到SPARK_HOME / sbin并输入:

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

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