使用 Spark 查询位于远程集群上的 Hive 数据

Posted

技术标签:

【中文标题】使用 Spark 查询位于远程集群上的 Hive 数据【英文标题】:Querying Hive data located on a remote cluster using Spark [duplicate] 【发布时间】:2016-11-22 20:19:41 【问题描述】:

我正在尝试编写一个简单的 Scala 代码来查询位于远程集群上的 Hive 数据。我的代码将部署到 clusterA,但必须查询位于 clusterB 上的 Hive 表。我正在我的本地 Eclipse 中开发它并收到以下错误

org.apache.spark.sql.AnalysisException: Table not found: `<mydatabase>`.`<mytable>`;

我的代码的相关部分如下

    val conf = new SparkConf().setAppName("Xing")
    .setMaster("local[*]")
    conf.set("hive.metastore.uris","thrift://<clusterB url>:10000")
    val sc = SparkContext.getOrCreate(conf)
    val hc = new HiveContext(sc)
    val df = hc.sql("select * from <mydatabase>.<mytable>")

我怀疑这是配置问题,但我可能错了。任何建议将不胜感激。

【问题讨论】:

你能运行beeline并访问同一个HiveServer/database/table吗? 我可以使用 Hive JDBC 毫无问题地查询此表。此集群具有 Kerberos 安全设置。我试图在 SparkConf 中设置相同的属性,但出现了同样的错误。这些是我设置的属性: conf.set("login.user","") conf.set("keytab.file", "") conf.set("sun.security. krb5.debug","false") conf.set("java.security.krb5.conf","") conf.set("java.library.path","") conf.set ("hadoop.home.dir","") conf.set("hadoop.security.authentication","kerberos") 【参考方案1】:

元存储 URL 中的端口应为 9083,除非您故意更改它。 10000 用于 hiveserver2。

【讨论】:

感谢您指出这一点。但是,我在任一端口都遇到了同样的错误

以上是关于使用 Spark 查询位于远程集群上的 Hive 数据的主要内容,如果未能解决你的问题,请参考以下文章

Spark 本地连接远程服务器上带有kerberos认证的Hive

本地Spark连接远程集群Hive(Scala/Python)

本地IDEA中使用Spark直连集群上的Hive

二次开发Spark实现JDBC读取远程租户集群Hive数据并落地到本集群Hive的Hive2Hive数据集成Java

二次开发Spark实现JDBC读取远程租户集群Hive数据并落地到本集群Hive的Hive2Hive数据集成Java

Spark 上的 Hive 不返回聚合或连接查询的结果