【问题标题】:Connection to Spark SQL JDBC through Java Application fails通过 Java 应用程序连接到 Spark SQL JDBC 失败
【发布时间】: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 7VMWare 工作站内的Centos 7 OS 上使用HDP 2.5。代码从 Eclipse Neon 运行,JDK 8

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

【问题讨论】:

  • 错误提示它没有在端口 10015 上监听,或者至少不在 IP 地址 192.168.225.128 上
  • 使用 'netstat' 来验证端口是否在监听。另外,如果beeline能够连接到10015上的服务,那么端口一定是工作的,
  • 不,因为您正在连接到 127.0.0.1。端口可以​​在特定 IP 地址上打开,而在同一主机上的其他 IP 地址上关闭。
  • 我应该从防火墙做点什么吗?您认为可能是什么问题?

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


【解决方案1】:

我已经设法解决了,而且解决方案相当简单。您需要启动 Spark Thrift 服务器才能完成这项工作。

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

只要去 Ambari -> Spark。在右上角,您可以看到选项。单击它并从那里启动 Spark Thrift 服务器。

如果您在 Web UI 中看不到 Spark Thrift 服务器,请转到 SPARK_HOME/sbin 并输入:

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

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

【讨论】:

    【解决方案2】:

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

    bind-address = 127.0.0.1
    

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

    【讨论】:

    • 我没有找到上面提到的文件。此外,hive 元数据存储在 Hive 元存储中。还有其他建议吗?
    • 我知道 hive 元数据存储在 hive metastore 中,您选择存储它的关系数据库是 derby 吗?
    • 不,它是 MySQL 5.6。我找不到你提到的那个文件。我使用“查找”来查看是否存在任何此类文件,但没有结果。如果有其他名称或解决方案,请告诉我。
    • 可能你可以找到文件/etc/mysql/my.cnf
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    相关资源
    最近更新 更多