无法使用JDBC连接到Spark Thrift Server,继续使用Hive

时间:2017-09-08 10:11:16

标签: hive apache-spark-sql hdinsight

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

但它总是连接到Hive而不是Spark Thrift Server。虽然它们看起来相似但我可以查询数据,但我想利用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 Server不会公开:Ports used in HDInsight

1 个答案:

答案 0 :(得分:1)

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

Spark Thrift Server正在端口10002上运行,该端口不能像Azure HDInsight文档中记录的here那样公开访问。因此,这是从本地JDBC客户端连接到Spark SQL的另一种方法。

<强>背景

我通过SSH连接到群集头节点。

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

从这里,我可以使用Beeline客户端连接到Spark Thrift Server。

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

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

<强>解决方案:

所以我在本地机器中设置了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。