无法使用 JDBC 连接到 Spark Thrift 服务器,继续使用 Hive

Can not connect to Spark Thrift Server using JDBC, keeps using Hive

我正在使用 Azure HDInsight 并希望使用 JDBC 以与此处所述类似的方式连接到 Thrift Server:Thrift JDBC/ODBC Server.

但是它总是连接到 Hive 而不是 Spark Thrift 服务器。虽然它们看起来很相似并且我可以查询数据,但我想利用 Spark 执行引擎,因为我主要使用 Spark2,有时需要 JDBC 连接。 Spark 引擎也可能比 Hive/TEZ 快。

连接字符串如下所示:

jdbc:hive2://hdinsight-name.azurehdinsight.net:443/default;ssl=true?hive.server2.transport.mode=http;hive.server2.thrift.http.path=/hive2

尝试过的驱动程序:

1. maven:/org.spark-project.hive:hive-jdbc:1.2.1.spark2
2. maven:/org.apache.hive:hive-jdbc

更新:看起来 Spark Thrift 服务器未暴露给 public:Ports used in HDInsight

我能够通过以下解决方法从 JDBC 客户端连接到 Spark Thrift 服务器。

Spark Thrift 服务器 运行 正在端口 10002 上运行,如 Azure HDInsight 文档中记录的 here 所述,该端口不可公开访问。因此,这是从本地 JDBC 客户端连接到 Spark SQL 的替代方法。

背景:

我通过 SSH 连接到簇头节点。

ssh user@cluster-name-ssh.azurehdinsight.net

从这里,我能够使用 Beeline 客户端连接到 Spark Thrift 服务器。

beeline -u 'jdbc:hive2://localhost:10002/;transportMode=http'

借助 Beeline,我可以 运行 SQL 使用 Spark 引擎进行查询。

解法:

所以我在本地机器上设置了SSH端口转发(将本地端口10002转发到簇头节点)

  ssh -L 10002:localhost:10002 user@cluster-name-ssh.azurehdinsight.net

现在,我可以在 JDBC 客户端中使用此端口连接到 Spark SQL。

jdbc:hive2://localhost:10002/;transportMode=http

这样,您就可以从本地 JDBC 客户端使用 Spark SQL。