无法使用 Spark 访问 Hive 仓库目录

Posted

技术标签:

【中文标题】无法使用 Spark 访问 Hive 仓库目录【英文标题】:Unable to access to Hive warehouse directory with Spark 【发布时间】:2018-11-20 14:01:07 【问题描述】:

我正在尝试使用位于以下路径的 IntelliJ 上的 Spark 连接到 Hive 仓库目录:

hdfs://localhost:9000/user/hive/warehouse

为了做到这一点,我使用了以下代码:

import org.apache.spark.sql.SparkSession

// warehouseLocation points to the default location for managed databases and tables
val warehouseLocation = "hdfs://localhost:9000/user/hive/warehouse"

val spark = SparkSession
 .builder()
 .appName("Spark Hive Local Connector")
 .config("spark.sql.warehouse.dir", warehouseLocation)
 .config("spark.master", "local")
 .enableHiveSupport()
 .getOrCreate()

spark.catalog.listDatabases().show(false)
spark.catalog.listTables().show(false)
spark.conf.getAll.mkString("\n")

import spark.implicits._
import spark.sql

sql("USE test")
sql("SELECT * FROM test.employee").show()

正如所见,我创建了一个数据库“test”并使用 hive 控制台在该数据库中创建了一个表“employee”。我想得到最新请求的结果。

'spark.catalog.'和'spark.conf。用于打印仓库路径和数据库设置的属性。

spark.catalog.listDatabases().show(false) 给我:

名称:默认 说明:默认 Hive 数据库 locationUri : hdfs://localhost:9000/user/hive/warehouse

spark.catalog.listTables.show(false) 给了我一个空的结果。所以这一步出了点问题。

在作业执行结束时,我得到以下错误:

> Exception in thread "main" org.apache.spark.sql.catalyst.analysis.NoSuchDatabaseException: Database 'test' not found;

我还为 Hive 仓库位置配置了 hive-site.xml 文件:

<property>
<name>hive.metastore.warehouse.dir</name>
<value>hdfs://localhost:9000/user/hive/warehouse</value>
</property>

我已经使用 Hive 控制台创建了数据库“测试”。

下面是我的组件的版本:

火花:2.2.0 蜂巢:1.1.0 Hadoop:2.7.3

有什么想法吗?

【问题讨论】:

我认为您不需要路径中的端口。使用这个val warehouseLocation = "hdfs:///user/hive/warehouse" 我已经尝试过了,我得到了同样的错误。 你有test数据库 是的,我将“显示数据库”命令的结果发送给您:默认测试所用时间:0.542 秒,获取 2 行` 【参考方案1】:

在 IntelliJ 项目中的 src 下创建资源目录,复制该文件夹下的 conf 文件。构建项目 .. 确保正确定义 hive.metastore.warehouse.uris 路径参考 hive-site.xml 。如果您正在获取 INFO metastore: Connected to metastore 那么您可以在日志中找到。例子。

请注意,与打包 jar 并在您的 hadoop 集群上运行相比,与 intellij 建立连接并运行作业会很慢。

【讨论】:

以上是关于无法使用 Spark 访问 Hive 仓库目录的主要内容,如果未能解决你的问题,请参考以下文章

无法从 impala/hive/spark sql 访问“spark 注册表”

通过 Spark 加载的表在 Hive 中无法访问

无法通过 PySpark 访问 Hive

无法使用 Apache spark 2.1.0 连接到 hive 数据库

Spark SQL 使用beeline访问hive仓库

在 HDP 的 spark2 sql 中无法访问 Hive 表